diff --git a/Editor/src/Misc/GizmoDrawer.cpp b/Editor/src/Misc/GizmoDrawer.cpp index db40deb6..2fd37f8e 100644 --- a/Editor/src/Misc/GizmoDrawer.cpp +++ b/Editor/src/Misc/GizmoDrawer.cpp @@ -366,7 +366,7 @@ void GizmoDrawer::DrawGizmos(Ref scene, bool occluded) Matrix4 gizmoPosition = Matrix4(1.0f); gizmoPosition = glm::translate(scene->m_EditorCamera->GetTransform(), Vector3(transform.GetGlobalTransform()[3])); gizmoPosition = gizmoPosition * rotationMatrix; - gizmoPosition = glm::translate(gizmoPosition, { 0, cylinderLength / 2.0, 0 }); + gizmoPosition = glm::translate(gizmoPosition, { 0, -cylinderLength / 2.0, 0 }); m_LineShader->Bind(); m_LineShader->SetUniform1f("u_Opacity", 1.0f); diff --git a/Nuake/src/Rendering/Renderer.cpp b/Nuake/src/Rendering/Renderer.cpp index 11503f52..47faf185 100644 --- a/Nuake/src/Rendering/Renderer.cpp +++ b/Nuake/src/Rendering/Renderer.cpp @@ -258,6 +258,21 @@ namespace Nuake deferredShader->Bind(); deferredShader->SetUniform1i("LightCount", 0); + for (int i = 0; i < m_Lights.size(); i++) + { + const std::string uniformAccessor = "Lights[" + std::to_string(i) + "]."; + deferredShader->SetUniform3f(uniformAccessor + "Position", 0, 0, 0); + deferredShader->SetUniform3f(uniformAccessor + "Color", 0, 0, 0); + deferredShader->SetUniform1i(uniformAccessor + "Type", -1); + deferredShader->SetUniform1i(uniformAccessor + "CastShadow", 0); + deferredShader->SetUniform1i(uniformAccessor + "ShadowMapID", -1); + } + + for (int i = 0; i < 8; i++) + { + deferredShader->SetUniform1i("SpotShadowMaps[" + std::to_string(i) + "]", 0); + } + m_Lights.clear(); spotShadowMapCount = 0; } @@ -271,7 +286,7 @@ namespace Nuake deferredShader->Bind(); Vector3 direction = light.GetDirection(); - Vector3 pos = transform.GetGlobalPosition(); + Vector3 pos = transform.GetGlobalTransform()[3]; Quat lightRotation = transform.GetGlobalRotation(); const int MaxSpotShadowMap = 8; @@ -318,31 +333,16 @@ namespace Nuake if (light.Type == Spot) { + direction = transform.GetGlobalRotation() * Vector3(0, 0, -1); deferredShader->SetUniform3f(uniformAccessor + "Direction", direction.x, direction.y, direction.z); deferredShader->SetUniform1f(uniformAccessor + "OuterAngle", glm::cos(Rad(light.OuterCutoff))); deferredShader->SetUniform1f(uniformAccessor + "InnerAngle", glm::cos(Rad(light.Cutoff))); if (light.CastShadows && spotShadowMapCount < MaxSpotShadowMap) { - int shadowMapTextureSlot = 22 + spotShadowMapCount; - deferredShader->SetUniform1f(uniformAccessor + "ShadowMapID", spotShadowMapCount); - - Matrix4 spotLightTransform = Matrix4(1.0f); - Vector3 pos = transform.GetGlobalPosition(); - pos.y *= -1.0f; - pos.x *= -1.0f; - pos.z *= -1.0f; - spotLightTransform = glm::translate(spotLightTransform, pos); - - Vector3 direction = transform.GetGlobalRotation() * Vector3(0, 0, 1); - auto lookatAt = lookAt(Vector3(), direction, Vector3(0, 1, 0)); - Quat offset = QuatFromEuler(0, -90.0f, 0); - Quat offset2 = QuatFromEuler(180.0f, 0.0f, 0); - - const Quat& globalRotation = glm::normalize(transform.GetGlobalRotation()); - const Matrix4& rotationMatrix = glm::mat4_cast(globalRotation); - - deferredShader->SetUniformMat4f(uniformAccessor + "Transform", light.GetProjection() * lookatAt * spotLightTransform); + int shadowMapTextureSlot = 21 + spotShadowMapCount; + deferredShader->SetUniform1i(uniformAccessor + "ShadowMapID", spotShadowMapCount); + deferredShader->SetUniformMat4f(uniformAccessor + "Transform", light.GetProjection() * glm::inverse(transform.GetGlobalTransform())); if (ImGui::Begin(("DebugShadowMap" + std::to_string(idx)).c_str())) { @@ -355,6 +355,13 @@ namespace Nuake spotShadowMapCount++; } } + else + { + deferredShader->SetUniform3f(uniformAccessor + "Direction", 0, 0, 0); + deferredShader->SetUniform1f(uniformAccessor + "OuterAngle", glm::cos(Rad(light.OuterCutoff))); + deferredShader->SetUniform1f(uniformAccessor + "InnerAngle", glm::cos(Rad(light.Cutoff))); + deferredShader->SetUniform1f(uniformAccessor + "ShadowMapID", -1); + } deferredShader->SetUniform1i("LightCount", static_cast(idx)); } diff --git a/Nuake/src/Rendering/SceneRenderer.cpp b/Nuake/src/Rendering/SceneRenderer.cpp index b6bcc725..44a50289 100644 --- a/Nuake/src/Rendering/SceneRenderer.cpp +++ b/Nuake/src/Rendering/SceneRenderer.cpp @@ -608,7 +608,7 @@ namespace Nuake const Quat& globalRotation = glm::normalize(lightTransform.GetGlobalRotation()); const Matrix4& rotationMatrix = glm::mat4_cast(globalRotation); - shader->SetUniformMat4f("u_LightTransform", light.GetProjection() * lookatAt * spotLightTransform); + shader->SetUniformMat4f("u_LightTransform", light.GetProjection() * glm::inverse(lightTransform.GetGlobalTransform())); for (auto e : meshView) { auto [transform, mesh, visibility] = meshView.get(e); diff --git a/Nuake/src/Resource/StaticResources.cpp b/Nuake/src/Resource/StaticResources.cpp index 405b1297..e03ee0fb 100644 --- a/Nuake/src/Resource/StaticResources.cpp +++ b/Nuake/src/Resource/StaticResources.cpp @@ -268811,98 +268811,243 @@ const std::string Resources_Shaders_deferred_shader_path = R"(Resources/Shaders/ 0x63, 0x32, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x65, 0x70, 0x28, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2c, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, - 0x72, 0x65, 0x28, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, - 0x2c, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x78, 0x79, 0x29, - 0x2e, 0x72, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, - 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x4c, 0x69, 0x6e, 0x65, - 0x61, 0x72, 0x28, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, - 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x2c, 0x20, - 0x76, 0x65, 0x63, 0x32, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x2c, - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, - 0x72, 0x65, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, - 0x65, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x70, 0x69, 0x78, - 0x65, 0x6c, 0x50, 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6f, 0x72, - 0x64, 0x73, 0x20, 0x2f, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x53, 0x69, - 0x7a, 0x65, 0x20, 0x2b, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, 0x2e, - 0x35, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, - 0x32, 0x20, 0x66, 0x72, 0x61, 0x63, 0x50, 0x61, 0x72, 0x74, 0x20, 0x3d, - 0x20, 0x66, 0x72, 0x61, 0x63, 0x74, 0x28, 0x70, 0x69, 0x78, 0x65, 0x6c, - 0x50, 0x6f, 0x73, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, - 0x65, 0x63, 0x32, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x78, - 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x28, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x50, - 0x6f, 0x73, 0x20, 0x2d, 0x20, 0x66, 0x72, 0x61, 0x63, 0x50, 0x61, 0x72, - 0x74, 0x29, 0x20, 0x2a, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x53, 0x69, - 0x7a, 0x65, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x62, 0x6c, 0x54, 0x65, 0x78, 0x65, 0x6c, - 0x20, 0x3d, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, - 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x28, 0x73, 0x68, 0x61, 0x64, 0x6f, - 0x77, 0x4d, 0x61, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, - 0x65, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, - 0x65, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x20, 0x62, 0x72, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x20, 0x3d, - 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x64, 0x6f, - 0x77, 0x4d, 0x61, 0x70, 0x28, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, - 0x61, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x78, - 0x65, 0x6c, 0x20, 0x2b, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, - 0x78, 0x65, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x2c, 0x20, 0x30, - 0x2e, 0x30, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, - 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x20, 0x74, 0x6c, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, + 0x20, 0x3c, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x73, + 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x2c, 0x20, 0x63, 0x6f, + 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x78, 0x79, 0x29, 0x2e, 0x72, 0x20, 0x3f, + 0x20, 0x31, 0x2e, 0x30, 0x66, 0x20, 0x3a, 0x20, 0x30, 0x2e, 0x30, 0x66, + 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x64, + 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x28, + 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x73, 0x68, + 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x2c, 0x20, 0x76, 0x65, 0x63, + 0x32, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x2c, 0x20, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x2c, + 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x53, + 0x69, 0x7a, 0x65, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x50, + 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x20, + 0x2f, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x20, + 0x2b, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, 0x2e, 0x35, 0x29, 0x3b, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x66, + 0x72, 0x61, 0x63, 0x50, 0x61, 0x72, 0x74, 0x20, 0x3d, 0x20, 0x66, 0x72, + 0x61, 0x63, 0x74, 0x28, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x50, 0x6f, 0x73, + 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, + 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x20, + 0x3d, 0x20, 0x28, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x50, 0x6f, 0x73, 0x20, + 0x2d, 0x20, 0x66, 0x72, 0x61, 0x63, 0x50, 0x61, 0x72, 0x74, 0x29, 0x20, + 0x2a, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x3b, + 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x20, 0x62, 0x6c, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x28, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x78, 0x65, - 0x6c, 0x20, 0x2b, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, 0x2e, 0x30, - 0x2c, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x2e, - 0x79, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x29, - 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x20, 0x74, 0x72, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x53, - 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, - 0x61, 0x70, 0x28, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, - 0x2c, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x78, 0x65, 0x6c, - 0x20, 0x2b, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x53, 0x69, 0x7a, 0x65, + 0x6c, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x29, 0x3b, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, + 0x62, 0x72, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, + 0x70, 0x28, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x2c, + 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x20, + 0x2b, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x65, 0x6c, + 0x53, 0x69, 0x7a, 0x65, 0x2e, 0x78, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x29, 0x3b, 0x0d, - 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x20, 0x6d, 0x69, 0x78, 0x41, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, - 0x62, 0x6c, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x74, 0x6c, 0x54, - 0x65, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x66, 0x72, 0x61, 0x63, 0x50, 0x61, - 0x72, 0x74, 0x2e, 0x79, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6d, 0x69, 0x78, 0x42, 0x20, 0x3d, - 0x20, 0x6d, 0x69, 0x78, 0x28, 0x62, 0x72, 0x54, 0x65, 0x78, 0x65, 0x6c, - 0x2c, 0x20, 0x74, 0x72, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x66, - 0x72, 0x61, 0x63, 0x50, 0x61, 0x72, 0x74, 0x2e, 0x79, 0x29, 0x3b, 0x0d, - 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x6d, 0x69, 0x78, 0x41, 0x2c, 0x20, - 0x6d, 0x69, 0x78, 0x42, 0x2c, 0x20, 0x66, 0x72, 0x61, 0x63, 0x50, 0x61, - 0x72, 0x74, 0x2e, 0x78, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, - 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x53, 0x68, 0x61, 0x64, 0x6f, - 0x77, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x76, 0x65, 0x63, 0x33, 0x20, 0x46, 0x72, 0x61, 0x67, 0x50, 0x6f, - 0x73, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6e, 0x6f, 0x72, 0x6d, - 0x61, 0x6c, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, + 0x6c, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, + 0x28, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x2c, 0x20, + 0x73, 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x20, 0x2b, + 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x74, + 0x65, 0x78, 0x65, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x2e, 0x79, 0x29, 0x2c, + 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x29, 0x3b, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x72, + 0x54, 0x65, 0x78, 0x65, 0x6c, 0x20, 0x3d, 0x20, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x28, + 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x2c, 0x20, 0x73, + 0x74, 0x61, 0x72, 0x74, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x20, 0x2b, 0x20, + 0x74, 0x65, 0x78, 0x65, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x2c, 0x20, 0x63, + 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x65, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6d, 0x69, + 0x78, 0x41, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x78, 0x28, 0x62, 0x6c, 0x54, + 0x65, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x74, 0x6c, 0x54, 0x65, 0x78, 0x65, + 0x6c, 0x2c, 0x20, 0x66, 0x72, 0x61, 0x63, 0x50, 0x61, 0x72, 0x74, 0x2e, + 0x79, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x20, 0x6d, 0x69, 0x78, 0x42, 0x20, 0x3d, 0x20, 0x6d, 0x69, + 0x78, 0x28, 0x62, 0x72, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x74, + 0x72, 0x54, 0x65, 0x78, 0x65, 0x6c, 0x2c, 0x20, 0x66, 0x72, 0x61, 0x63, + 0x50, 0x61, 0x72, 0x74, 0x2e, 0x79, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, + 0x69, 0x78, 0x28, 0x6d, 0x69, 0x78, 0x41, 0x2c, 0x20, 0x6d, 0x69, 0x78, + 0x42, 0x2c, 0x20, 0x66, 0x72, 0x61, 0x63, 0x50, 0x61, 0x72, 0x74, 0x2e, + 0x78, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x20, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x43, 0x61, + 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x76, 0x65, + 0x63, 0x33, 0x20, 0x46, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x73, 0x2c, 0x20, + 0x76, 0x65, 0x63, 0x33, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x29, + 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, + 0x47, 0x65, 0x74, 0x20, 0x44, 0x65, 0x70, 0x74, 0x68, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x65, 0x70, + 0x74, 0x68, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, + 0x46, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x73, 0x20, 0x2d, 0x20, 0x75, 0x5f, + 0x45, 0x79, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x73, + 0x68, 0x61, 0x64, 0x6f, 0x77, 0x6d, 0x61, 0x70, 0x20, 0x3d, 0x20, 0x47, + 0x65, 0x74, 0x43, 0x53, 0x4d, 0x44, 0x65, 0x70, 0x74, 0x68, 0x28, 0x64, + 0x65, 0x70, 0x74, 0x68, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x66, 0x20, 0x28, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x6d, 0x61, + 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, + 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x66, 0x72, 0x61, 0x67, 0x50, 0x6f, + 0x73, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x70, 0x61, 0x63, 0x65, 0x20, + 0x3d, 0x20, 0x75, 0x5f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x4c, 0x69, 0x67, + 0x68, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x73, + 0x5b, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x6d, 0x61, 0x70, 0x5d, 0x20, + 0x2a, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x46, 0x72, 0x61, 0x67, 0x50, + 0x6f, 0x73, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x29, 0x3b, 0x0d, 0x0a, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x70, 0x65, 0x72, + 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, + 0x74, 0x69, 0x76, 0x65, 0x20, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70, 0x72, + 0x6f, 0x6a, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x20, 0x3d, 0x20, 0x66, + 0x72, 0x61, 0x67, 0x50, 0x6f, 0x73, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x2f, 0x20, 0x66, + 0x72, 0x61, 0x67, 0x50, 0x6f, 0x73, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, + 0x70, 0x61, 0x63, 0x65, 0x2e, 0x77, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, + 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x5b, 0x30, 0x2c, 0x31, 0x5d, 0x20, 0x72, + 0x61, 0x6e, 0x67, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, + 0x6f, 0x6a, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x20, 0x3d, 0x20, 0x70, + 0x72, 0x6f, 0x6a, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x20, 0x2a, 0x20, + 0x30, 0x2e, 0x35, 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x35, 0x3b, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x63, + 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, + 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, + 0x6c, 0x69, 0x67, 0x68, 0x74, 0x27, 0x73, 0x20, 0x70, 0x65, 0x72, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x28, 0x75, 0x73, 0x69, + 0x6e, 0x67, 0x20, 0x5b, 0x30, 0x2c, 0x31, 0x5d, 0x20, 0x72, 0x61, 0x6e, + 0x67, 0x65, 0x20, 0x66, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x73, 0x4c, 0x69, + 0x67, 0x68, 0x74, 0x20, 0x61, 0x73, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, + 0x73, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x67, + 0x65, 0x74, 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, 0x61, 0x67, + 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6c, 0x69, + 0x67, 0x68, 0x74, 0x27, 0x73, 0x20, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, + 0x44, 0x65, 0x70, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x70, 0x72, 0x6f, 0x6a, + 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x7a, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, + 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, 0x72, 0x20, 0x63, 0x75, 0x72, 0x72, + 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, 0x61, 0x67, 0x20, 0x70, 0x6f, 0x73, + 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, + 0x77, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x30, 0x2e, + 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x20, 0x62, 0x69, 0x61, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, + 0x28, 0x30, 0x2e, 0x30, 0x30, 0x35, 0x20, 0x2a, 0x20, 0x28, 0x31, 0x2e, + 0x30, 0x20, 0x2d, 0x20, 0x64, 0x6f, 0x74, 0x28, 0x6e, 0x6f, 0x72, 0x6d, + 0x61, 0x6c, 0x2c, 0x20, 0x75, 0x5f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x29, 0x2c, 0x20, + 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x2f, 0x2f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x70, 0x63, + 0x66, 0x44, 0x65, 0x70, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x28, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, + 0x61, 0x70, 0x73, 0x5b, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x6d, 0x61, + 0x70, 0x5d, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x70, 0x72, 0x6f, + 0x6a, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x78, 0x79, 0x2c, 0x20, + 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, + 0x29, 0x2c, 0x20, 0x62, 0x69, 0x61, 0x73, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x68, 0x61, + 0x64, 0x6f, 0x77, 0x6d, 0x61, 0x70, 0x20, 0x3c, 0x3d, 0x20, 0x34, 0x29, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, + 0x50, 0x4c, 0x45, 0x53, 0x20, 0x3d, 0x20, 0x34, 0x2e, 0x66, 0x3b, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x53, 0x41, 0x4d, + 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x20, 0x3d, + 0x20, 0x28, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, + 0x53, 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x29, 0x20, 0x2f, 0x20, + 0x32, 0x2e, 0x30, 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x20, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, + 0x45, 0x53, 0x5f, 0x53, 0x51, 0x55, 0x41, 0x52, 0x45, 0x44, 0x20, 0x3d, + 0x20, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, + 0x20, 0x2a, 0x20, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, + 0x45, 0x53, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x53, + 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x2f, 0x20, + 0x76, 0x65, 0x63, 0x32, 0x28, 0x34, 0x30, 0x39, 0x36, 0x2c, 0x20, 0x34, + 0x30, 0x39, 0x36, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x72, + 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x66, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6f, 0x72, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x79, 0x20, + 0x3d, 0x20, 0x2d, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x53, + 0x54, 0x41, 0x52, 0x54, 0x3b, 0x20, 0x79, 0x20, 0x3c, 0x3d, 0x20, 0x53, + 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, + 0x3b, 0x20, 0x79, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x29, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, + 0x78, 0x20, 0x3d, 0x20, 0x2d, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, + 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x3b, 0x20, 0x78, 0x20, 0x3c, 0x3d, + 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x53, 0x54, 0x41, + 0x52, 0x54, 0x3b, 0x20, 0x78, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x2e, 0x30, + 0x66, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, + 0x65, 0x63, 0x32, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x4f, 0x66, + 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, + 0x78, 0x2c, 0x20, 0x79, 0x29, 0x20, 0x2a, 0x20, 0x74, 0x65, 0x78, 0x65, + 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, + 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x28, 0x53, 0x68, 0x61, 0x64, + 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x73, 0x5b, 0x73, 0x68, 0x61, 0x64, 0x6f, + 0x77, 0x6d, 0x61, 0x70, 0x5d, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x43, + 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x78, 0x79, 0x20, 0x2b, 0x20, 0x63, + 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x2c, + 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x74, + 0x68, 0x20, 0x2d, 0x20, 0x62, 0x69, 0x61, 0x73, 0x2c, 0x20, 0x74, 0x65, + 0x78, 0x65, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, + 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, + 0x20, 0x2f, 0x20, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50, 0x4c, + 0x45, 0x53, 0x5f, 0x53, 0x51, 0x55, 0x41, 0x52, 0x45, 0x44, 0x3b, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x53, 0x61, + 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, + 0x70, 0x28, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x73, + 0x5b, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x6d, 0x61, 0x70, 0x5d, 0x2c, + 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x2e, + 0x78, 0x79, 0x2c, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, + 0x65, 0x70, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x62, 0x69, 0x61, 0x73, 0x29, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x20, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x43, 0x61, 0x6c, 0x63, + 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x6f, 0x74, 0x28, + 0x76, 0x65, 0x63, 0x33, 0x20, 0x46, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x73, + 0x2c, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, + 0x6c, 0x2c, 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6c, 0x69, 0x67, + 0x68, 0x74, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x47, 0x65, 0x74, 0x20, 0x44, 0x65, 0x70, 0x74, 0x68, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x46, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x73, 0x20, 0x2d, 0x20, 0x75, 0x5f, 0x45, 0x79, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, - 0x74, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x6d, 0x61, 0x70, 0x20, - 0x3d, 0x20, 0x47, 0x65, 0x74, 0x43, 0x53, 0x4d, 0x44, 0x65, 0x70, 0x74, - 0x68, 0x28, 0x64, 0x65, 0x70, 0x74, 0x68, 0x29, 0x3b, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x73, 0x68, 0x61, 0x64, 0x6f, - 0x77, 0x6d, 0x61, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x2d, 0x31, 0x29, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x66, 0x72, 0x61, - 0x67, 0x50, 0x6f, 0x73, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x70, 0x61, - 0x63, 0x65, 0x20, 0x3d, 0x20, 0x75, 0x5f, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, - 0x4c, 0x69, 0x67, 0x68, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x73, 0x5b, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x6d, 0x61, - 0x70, 0x5d, 0x20, 0x2a, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x46, 0x72, + 0x6f, 0x6e, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, + 0x63, 0x34, 0x20, 0x66, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x73, 0x4c, 0x69, + 0x67, 0x68, 0x74, 0x53, 0x70, 0x61, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x6c, + 0x69, 0x67, 0x68, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, + 0x72, 0x6d, 0x20, 0x2a, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x46, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x73, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x70, 0x65, 0x72, 0x73, @@ -268944,10 +269089,9 @@ const std::string Resources_Shaders_deferred_shader_path = R"(Resources/Shaders/ 0x6f, 0x61, 0x74, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x62, 0x69, 0x61, 0x73, 0x20, 0x3d, 0x20, - 0x6d, 0x61, 0x78, 0x28, 0x30, 0x2e, 0x30, 0x30, 0x35, 0x20, 0x2a, 0x20, - 0x28, 0x31, 0x2e, 0x30, 0x20, 0x2d, 0x20, 0x64, 0x6f, 0x74, 0x28, 0x6e, - 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x75, 0x5f, 0x44, 0x69, 0x72, - 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x67, 0x68, + 0x6d, 0x61, 0x78, 0x28, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x20, 0x2a, + 0x20, 0x28, 0x31, 0x2e, 0x30, 0x20, 0x2d, 0x20, 0x64, 0x6f, 0x74, 0x28, + 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x66, 0x6c, 0x6f, 0x61, 0x74, @@ -268958,427 +269102,297 @@ const std::string Resources_Shaders_deferred_shader_path = R"(Resources/Shaders/ 0x70, 0x72, 0x6f, 0x6a, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, 0x29, 0x2c, 0x20, 0x62, 0x69, 0x61, 0x73, 0x29, 0x3b, - 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x6d, 0x61, 0x70, 0x20, 0x3c, 0x3d, - 0x20, 0x34, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, - 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x4e, 0x55, 0x4d, 0x5f, - 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x20, 0x3d, 0x20, 0x34, 0x2e, - 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, - 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, - 0x54, 0x20, 0x3d, 0x20, 0x28, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, - 0x50, 0x4c, 0x45, 0x53, 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x29, - 0x20, 0x2f, 0x20, 0x32, 0x2e, 0x30, 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, - 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x53, 0x51, 0x55, 0x41, 0x52, 0x45, - 0x44, 0x20, 0x3d, 0x20, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, 0x4d, 0x50, - 0x4c, 0x45, 0x53, 0x20, 0x2a, 0x20, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, - 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, - 0x65, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, - 0x20, 0x2f, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x34, 0x30, 0x39, 0x36, - 0x2c, 0x20, 0x34, 0x30, 0x39, 0x36, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x30, - 0x2e, 0x30, 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x20, 0x79, 0x20, 0x3d, 0x20, 0x2d, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, - 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x3b, 0x20, 0x79, 0x20, 0x3c, - 0x3d, 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x53, 0x54, - 0x41, 0x52, 0x54, 0x3b, 0x20, 0x79, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x2e, - 0x30, 0x66, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x20, 0x78, 0x20, 0x3d, 0x20, 0x2d, 0x53, 0x41, 0x4d, 0x50, - 0x4c, 0x45, 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x3b, 0x20, 0x78, - 0x20, 0x3c, 0x3d, 0x20, 0x53, 0x41, 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x5f, - 0x53, 0x54, 0x41, 0x52, 0x54, 0x3b, 0x20, 0x78, 0x20, 0x2b, 0x3d, 0x20, - 0x31, 0x2e, 0x30, 0x66, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, - 0x73, 0x4f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x20, 0x76, 0x65, - 0x63, 0x32, 0x28, 0x78, 0x2c, 0x20, 0x79, 0x29, 0x20, 0x2a, 0x20, 0x74, - 0x65, 0x78, 0x65, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x3b, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x20, 0x2b, 0x3d, - 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x64, 0x6f, - 0x77, 0x4d, 0x61, 0x70, 0x4c, 0x69, 0x6e, 0x65, 0x61, 0x72, 0x28, 0x53, - 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x73, 0x5b, 0x73, 0x68, - 0x61, 0x64, 0x6f, 0x77, 0x6d, 0x61, 0x70, 0x5d, 0x2c, 0x20, 0x70, 0x72, - 0x6f, 0x6a, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x78, 0x79, 0x20, - 0x2b, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x4f, 0x66, 0x66, 0x73, - 0x65, 0x74, 0x2c, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, - 0x65, 0x70, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x62, 0x69, 0x61, 0x73, 0x2c, - 0x20, 0x74, 0x65, 0x78, 0x65, 0x6c, 0x53, 0x69, 0x7a, 0x65, 0x29, 0x3b, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x72, 0x65, 0x73, - 0x75, 0x6c, 0x74, 0x20, 0x2f, 0x20, 0x4e, 0x55, 0x4d, 0x5f, 0x53, 0x41, - 0x4d, 0x50, 0x4c, 0x45, 0x53, 0x5f, 0x53, 0x51, 0x55, 0x41, 0x52, 0x45, - 0x44, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, - 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, 0x64, 0x6f, - 0x77, 0x4d, 0x61, 0x70, 0x28, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, - 0x61, 0x70, 0x73, 0x5b, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x6d, 0x61, - 0x70, 0x5d, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x43, 0x6f, 0x6f, 0x72, - 0x64, 0x73, 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, - 0x6e, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, 0x20, 0x2d, 0x20, 0x62, 0x69, - 0x61, 0x73, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x43, - 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, - 0x6f, 0x74, 0x28, 0x76, 0x65, 0x63, 0x33, 0x20, 0x46, 0x72, 0x61, 0x67, - 0x50, 0x6f, 0x73, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6e, 0x6f, - 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x47, 0x65, 0x74, 0x20, 0x44, 0x65, - 0x70, 0x74, 0x68, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x6c, - 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x46, 0x72, 0x61, 0x67, 0x50, 0x6f, - 0x73, 0x20, 0x2d, 0x20, 0x75, 0x5f, 0x45, 0x79, 0x65, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x66, 0x72, 0x61, 0x67, 0x50, 0x6f, - 0x73, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x70, 0x61, 0x63, 0x65, 0x20, - 0x3d, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x54, 0x72, 0x61, 0x6e, - 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x2a, 0x20, 0x76, 0x65, 0x63, 0x34, - 0x28, 0x46, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x73, 0x2c, 0x20, 0x31, 0x2e, - 0x30, 0x66, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x2f, 0x2f, 0x20, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x70, - 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, 0x64, - 0x69, 0x76, 0x69, 0x64, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, - 0x65, 0x63, 0x33, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x43, 0x6f, 0x6f, 0x72, - 0x64, 0x73, 0x20, 0x3d, 0x20, 0x66, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x73, - 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x78, - 0x79, 0x7a, 0x20, 0x2f, 0x20, 0x66, 0x72, 0x61, 0x67, 0x50, 0x6f, 0x73, - 0x4c, 0x69, 0x67, 0x68, 0x74, 0x53, 0x70, 0x61, 0x63, 0x65, 0x2e, 0x77, - 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x74, 0x72, - 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x74, 0x6f, 0x20, 0x5b, - 0x30, 0x2c, 0x31, 0x5d, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x43, 0x6f, 0x6f, 0x72, - 0x64, 0x73, 0x20, 0x3d, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x43, 0x6f, 0x6f, - 0x72, 0x64, 0x73, 0x20, 0x2a, 0x20, 0x30, 0x2e, 0x35, 0x20, 0x2b, 0x20, - 0x30, 0x2e, 0x35, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, - 0x20, 0x67, 0x65, 0x74, 0x20, 0x63, 0x6c, 0x6f, 0x73, 0x65, 0x73, 0x74, - 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x27, - 0x73, 0x20, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, - 0x65, 0x20, 0x28, 0x75, 0x73, 0x69, 0x6e, 0x67, 0x20, 0x5b, 0x30, 0x2c, - 0x31, 0x5d, 0x20, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x20, 0x66, 0x72, 0x61, - 0x67, 0x50, 0x6f, 0x73, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x61, 0x73, - 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x29, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x67, 0x65, 0x74, 0x20, 0x64, 0x65, 0x70, - 0x74, 0x68, 0x20, 0x6f, 0x66, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x20, 0x66, 0x72, 0x61, 0x67, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x66, - 0x72, 0x6f, 0x6d, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x27, 0x73, 0x20, - 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, - 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, 0x20, - 0x3d, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x73, - 0x2e, 0x7a, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, - 0x63, 0x68, 0x65, 0x63, 0x6b, 0x20, 0x77, 0x68, 0x65, 0x74, 0x68, 0x65, - 0x72, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x20, 0x66, 0x72, - 0x61, 0x67, 0x20, 0x70, 0x6f, 0x73, 0x20, 0x69, 0x73, 0x20, 0x69, 0x6e, - 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, - 0x77, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x62, 0x69, 0x61, 0x73, - 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x30, 0x2e, 0x30, 0x30, 0x30, - 0x35, 0x20, 0x2a, 0x20, 0x28, 0x31, 0x2e, 0x30, 0x20, 0x2d, 0x20, 0x64, - 0x6f, 0x74, 0x28, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x2c, 0x20, 0x6c, - 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x29, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35, - 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x20, 0x70, 0x63, 0x66, 0x44, 0x65, 0x70, 0x74, 0x68, - 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x53, - 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x73, 0x5b, 0x73, 0x68, - 0x61, 0x64, 0x6f, 0x77, 0x6d, 0x61, 0x70, 0x5d, 0x2c, 0x20, 0x76, 0x65, - 0x63, 0x33, 0x28, 0x70, 0x72, 0x6f, 0x6a, 0x43, 0x6f, 0x6f, 0x72, 0x64, - 0x73, 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, - 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, 0x29, 0x2c, 0x20, 0x62, 0x69, 0x61, - 0x73, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x28, 0x53, 0x70, - 0x6f, 0x74, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x73, - 0x5b, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x64, 0x6f, - 0x77, 0x4d, 0x61, 0x70, 0x49, 0x44, 0x5d, 0x2c, 0x20, 0x70, 0x72, 0x6f, - 0x6a, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x78, 0x79, 0x2c, 0x20, - 0x63, 0x75, 0x72, 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, - 0x20, 0x2d, 0x20, 0x62, 0x69, 0x61, 0x73, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, - 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, - 0x6e, 0x28, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x76, 0x65, 0x63, 0x33, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, - 0x73, 0x20, 0x3d, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, 0x73, - 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x70, 0x74, 0x68, 0x28, 0x74, 0x65, - 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x6d, 0x5f, 0x44, 0x65, 0x70, 0x74, - 0x68, 0x2c, 0x20, 0x55, 0x56, 0x29, 0x2e, 0x72, 0x29, 0x3b, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x65, 0x78, 0x74, - 0x75, 0x72, 0x65, 0x28, 0x6d, 0x5f, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, - 0x20, 0x55, 0x56, 0x29, 0x2e, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, - 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, - 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, - 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x29, 0x3b, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, - 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x6f, - 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x5b, - 0x30, 0x2c, 0x20, 0x31, 0x5d, 0x20, 0x74, 0x6f, 0x20, 0x5b, 0x2d, 0x31, - 0x2c, 0x20, 0x31, 0x5d, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, - 0x65, 0x63, 0x33, 0x20, 0x61, 0x6c, 0x62, 0x65, 0x64, 0x6f, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, - 0x65, 0x28, 0x6d, 0x5f, 0x41, 0x6c, 0x62, 0x65, 0x64, 0x6f, 0x2c, 0x20, - 0x55, 0x56, 0x29, 0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, - 0x6c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, - 0x74, 0x75, 0x72, 0x65, 0x28, 0x6d, 0x5f, 0x4e, 0x6f, 0x72, 0x6d, 0x61, - 0x6c, 0x2c, 0x20, 0x55, 0x56, 0x29, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x2a, - 0x20, 0x32, 0x2e, 0x30, 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0d, - 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, - 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x61, 0x6d, 0x70, - 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, - 0x28, 0x6d, 0x5f, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x2c, - 0x20, 0x55, 0x56, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, - 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x6c, 0x69, - 0x63, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, - 0x61, 0x6c, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x72, 0x3b, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, - 0x6f, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, - 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x3b, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x72, 0x6f, 0x75, - 0x67, 0x68, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x61, - 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, - 0x2e, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x20, 0x75, 0x6e, 0x6c, 0x69, 0x74, 0x20, 0x3d, 0x20, 0x6d, + 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, + 0x72, 0x6e, 0x20, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x53, 0x68, 0x61, + 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x28, 0x53, 0x70, 0x6f, 0x74, 0x53, + 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, 0x70, 0x73, 0x5b, 0x6c, 0x69, + 0x67, 0x68, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x4d, 0x61, + 0x70, 0x49, 0x44, 0x5d, 0x2c, 0x20, 0x70, 0x72, 0x6f, 0x6a, 0x43, 0x6f, + 0x6f, 0x72, 0x64, 0x73, 0x2e, 0x78, 0x79, 0x2c, 0x20, 0x63, 0x75, 0x72, + 0x72, 0x65, 0x6e, 0x74, 0x44, 0x65, 0x70, 0x74, 0x68, 0x20, 0x2d, 0x20, + 0x30, 0x2e, 0x30, 0x30, 0x30, 0x30, 0x30, 0x35, 0x29, 0x3b, 0x0d, 0x0a, + 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, + 0x69, 0x6e, 0x28, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x50, + 0x6f, 0x73, 0x20, 0x3d, 0x20, 0x57, 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, + 0x73, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x70, 0x74, 0x68, 0x28, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x6d, 0x5f, 0x44, 0x65, 0x70, + 0x74, 0x68, 0x2c, 0x20, 0x55, 0x56, 0x29, 0x2e, 0x72, 0x29, 0x3b, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x65, 0x78, + 0x74, 0x75, 0x72, 0x65, 0x28, 0x6d, 0x5f, 0x44, 0x65, 0x70, 0x74, 0x68, + 0x2c, 0x20, 0x55, 0x56, 0x29, 0x2e, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x31, + 0x29, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, 0x72, 0x61, 0x67, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, + 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x2c, 0x20, 0x30, 0x29, 0x3b, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, + 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, + 0x5b, 0x30, 0x2c, 0x20, 0x31, 0x5d, 0x20, 0x74, 0x6f, 0x20, 0x5b, 0x2d, + 0x31, 0x2c, 0x20, 0x31, 0x5d, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x76, 0x65, 0x63, 0x33, 0x20, 0x61, 0x6c, 0x62, 0x65, 0x64, 0x6f, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, + 0x72, 0x65, 0x28, 0x6d, 0x5f, 0x41, 0x6c, 0x62, 0x65, 0x64, 0x6f, 0x2c, + 0x20, 0x55, 0x56, 0x29, 0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6e, 0x6f, 0x72, 0x6d, + 0x61, 0x6c, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x6d, 0x5f, 0x4e, 0x6f, 0x72, 0x6d, + 0x61, 0x6c, 0x2c, 0x20, 0x55, 0x56, 0x29, 0x2e, 0x72, 0x67, 0x62, 0x20, + 0x2a, 0x20, 0x32, 0x2e, 0x30, 0x20, 0x2d, 0x20, 0x31, 0x2e, 0x30, 0x3b, + 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, + 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x61, 0x6d, + 0x70, 0x6c, 0x65, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, + 0x65, 0x28, 0x6d, 0x5f, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x2c, 0x20, 0x55, 0x56, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x6c, + 0x69, 0x63, 0x20, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, + 0x69, 0x61, 0x6c, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x72, 0x3b, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, + 0x61, 0x6f, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, + 0x6c, 0x53, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x2e, 0x67, 0x3b, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x72, 0x6f, + 0x75, 0x67, 0x68, 0x6e, 0x65, 0x73, 0x73, 0x20, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x61, 0x6d, 0x70, 0x6c, - 0x65, 0x2e, 0x61, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x20, 0x73, 0x73, 0x61, 0x6f, 0x20, 0x3d, 0x20, 0x30, - 0x2e, 0x30, 0x66, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x75, 0x5f, 0x44, 0x69, 0x73, 0x61, 0x62, 0x6c, - 0x65, 0x53, 0x53, 0x41, 0x4f, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x73, 0x73, 0x61, 0x6f, 0x20, 0x3d, 0x20, 0x31, - 0x2e, 0x30, 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x73, 0x73, 0x61, 0x6f, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, - 0x74, 0x75, 0x72, 0x65, 0x28, 0x6d, 0x5f, 0x53, 0x53, 0x41, 0x4f, 0x2c, - 0x20, 0x55, 0x56, 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x75, 0x6e, 0x6c, 0x69, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x2e, - 0x31, 0x66, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, - 0x74, 0x20, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x76, 0x65, 0x20, 0x3d, - 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x6d, 0x5f, 0x45, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x76, 0x65, 0x2c, 0x20, 0x55, 0x56, 0x29, - 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, - 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x61, 0x6c, 0x62, 0x65, 0x64, 0x6f, - 0x20, 0x2a, 0x20, 0x73, 0x73, 0x61, 0x6f, 0x20, 0x2a, 0x20, 0x65, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x76, 0x65, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, - 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, - 0x33, 0x20, 0x4e, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, - 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, - 0x56, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, - 0x65, 0x28, 0x75, 0x5f, 0x45, 0x79, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x50, - 0x6f, 0x73, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, - 0x63, 0x33, 0x20, 0x52, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x66, 0x6c, 0x65, - 0x63, 0x74, 0x28, 0x2d, 0x56, 0x2c, 0x20, 0x4e, 0x29, 0x3b, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x46, 0x30, 0x20, - 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x2e, 0x30, 0x34, 0x29, - 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x46, 0x30, 0x20, 0x3d, 0x20, - 0x6d, 0x69, 0x78, 0x28, 0x46, 0x30, 0x2c, 0x20, 0x61, 0x6c, 0x62, 0x65, - 0x64, 0x6f, 0x2c, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x6c, 0x69, 0x63, - 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, - 0x20, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x20, 0x65, 0x71, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x65, 0x79, 0x65, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x6e, - 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x75, 0x5f, 0x45, - 0x79, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, - 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, 0x73, 0x29, 0x3b, 0x0d, - 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, - 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x2e, - 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, - 0x33, 0x20, 0x66, 0x6f, 0x67, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, - 0x28, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, - 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x75, 0x5f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x64, 0x6f, - 0x77, 0x20, 0x3c, 0x20, 0x30, 0x2e, 0x31, 0x66, 0x29, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x31, - 0x2e, 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, 0x72, - 0x75, 0x65, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, + 0x65, 0x2e, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x20, 0x75, 0x6e, 0x6c, 0x69, 0x74, 0x20, 0x3d, 0x20, + 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x53, 0x61, 0x6d, 0x70, + 0x6c, 0x65, 0x2e, 0x61, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x73, 0x61, 0x6f, 0x20, 0x3d, 0x20, + 0x30, 0x2e, 0x30, 0x66, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x75, 0x5f, 0x44, 0x69, 0x73, 0x61, 0x62, + 0x6c, 0x65, 0x53, 0x53, 0x41, 0x4f, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x73, 0x61, 0x6f, 0x20, 0x3d, 0x20, + 0x31, 0x2e, 0x30, 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x73, 0x73, 0x61, 0x6f, 0x20, 0x3d, 0x20, 0x74, 0x65, + 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x6d, 0x5f, 0x53, 0x53, 0x41, 0x4f, + 0x2c, 0x20, 0x55, 0x56, 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x75, 0x6e, 0x6c, 0x69, 0x74, 0x20, 0x3e, 0x20, 0x30, + 0x2e, 0x31, 0x66, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, + 0x61, 0x74, 0x20, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x76, 0x65, 0x20, + 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x6d, 0x5f, + 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x76, 0x65, 0x2c, 0x20, 0x55, 0x56, + 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, + 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x61, 0x6c, 0x62, 0x65, 0x64, + 0x6f, 0x20, 0x2a, 0x20, 0x73, 0x73, 0x61, 0x6f, 0x20, 0x2a, 0x20, 0x65, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x76, 0x65, 0x2c, 0x20, 0x31, 0x2e, 0x30, + 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, + 0x63, 0x33, 0x20, 0x4e, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, + 0x6c, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, + 0x20, 0x56, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, + 0x7a, 0x65, 0x28, 0x75, 0x5f, 0x45, 0x79, 0x65, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, + 0x50, 0x6f, 0x73, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, + 0x65, 0x63, 0x33, 0x20, 0x52, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x66, 0x6c, + 0x65, 0x63, 0x74, 0x28, 0x2d, 0x56, 0x2c, 0x20, 0x4e, 0x29, 0x3b, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x46, 0x30, + 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x2e, 0x30, 0x34, + 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x46, 0x30, 0x20, 0x3d, + 0x20, 0x6d, 0x69, 0x78, 0x28, 0x46, 0x30, 0x2c, 0x20, 0x61, 0x6c, 0x62, + 0x65, 0x64, 0x6f, 0x2c, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x6c, 0x69, + 0x63, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, + 0x2f, 0x20, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x61, 0x6e, 0x63, + 0x65, 0x20, 0x65, 0x71, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x65, 0x79, 0x65, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, + 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x75, 0x5f, + 0x45, 0x79, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, + 0x2d, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, 0x73, 0x29, 0x3b, + 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, + 0x20, 0x4c, 0x6f, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, + 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, + 0x63, 0x33, 0x20, 0x66, 0x6f, 0x67, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, + 0x33, 0x28, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, + 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, + 0x28, 0x75, 0x5f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x64, + 0x6f, 0x77, 0x20, 0x3c, 0x20, 0x30, 0x2e, 0x31, 0x66, 0x29, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x3d, 0x20, + 0x31, 0x2e, 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, + 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x74, + 0x72, 0x75, 0x65, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, + 0x33, 0x20, 0x4c, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, + 0x69, 0x7a, 0x65, 0x28, 0x75, 0x5f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0x0d, 0x0a, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x75, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x3b, 0x0d, + 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, + 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, + 0x28, 0x75, 0x5f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x61, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x75, 0x5f, + 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, + 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, + 0x3e, 0x20, 0x30, 0x2e, 0x31, 0x66, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x68, 0x61, 0x64, + 0x6f, 0x77, 0x20, 0x2a, 0x3d, 0x20, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, + 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, + 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, 0x73, 0x2c, 0x20, 0x4e, 0x29, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x76, 0x65, 0x63, 0x33, 0x20, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x63, + 0x65, 0x20, 0x3d, 0x20, 0x75, 0x5f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x2a, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6e, + 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, + 0x48, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, + 0x65, 0x28, 0x56, 0x20, 0x2b, 0x20, 0x4c, 0x29, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, + 0x20, 0x4e, 0x44, 0x46, 0x20, 0x3d, 0x20, 0x44, 0x69, 0x73, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x47, 0x58, 0x28, 0x4e, + 0x2c, 0x20, 0x48, 0x2c, 0x20, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6e, 0x65, + 0x73, 0x73, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x47, 0x20, 0x3d, 0x20, + 0x47, 0x65, 0x6f, 0x6d, 0x65, 0x74, 0x72, 0x79, 0x53, 0x6d, 0x69, 0x74, + 0x68, 0x28, 0x4e, 0x2c, 0x20, 0x56, 0x2c, 0x20, 0x4c, 0x2c, 0x20, 0x72, + 0x6f, 0x75, 0x67, 0x68, 0x6e, 0x65, 0x73, 0x73, 0x29, 0x3b, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, + 0x20, 0x46, 0x20, 0x3d, 0x20, 0x66, 0x72, 0x65, 0x73, 0x6e, 0x65, 0x6c, + 0x53, 0x63, 0x68, 0x6c, 0x69, 0x63, 0x6b, 0x28, 0x6d, 0x61, 0x78, 0x28, + 0x64, 0x6f, 0x74, 0x28, 0x48, 0x2c, 0x20, 0x56, 0x29, 0x2c, 0x20, 0x30, + 0x2e, 0x30, 0x29, 0x2c, 0x20, 0x46, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, + 0x33, 0x20, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x20, + 0x3d, 0x20, 0x4e, 0x44, 0x46, 0x20, 0x2a, 0x20, 0x47, 0x20, 0x2a, 0x20, + 0x46, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, + 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x34, 0x20, 0x2a, 0x20, + 0x6d, 0x61, 0x78, 0x28, 0x64, 0x6f, 0x74, 0x28, 0x4e, 0x2c, 0x20, 0x56, + 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x20, 0x2a, 0x20, 0x6d, 0x61, + 0x78, 0x28, 0x64, 0x6f, 0x74, 0x28, 0x4e, 0x2c, 0x20, 0x4c, 0x29, 0x2c, + 0x20, 0x30, 0x2e, 0x30, 0x29, 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x30, 0x30, + 0x31, 0x3b, 0x20, 0x2f, 0x2f, 0x20, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x20, + 0x74, 0x6f, 0x20, 0x70, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x64, + 0x69, 0x76, 0x69, 0x64, 0x65, 0x20, 0x62, 0x79, 0x20, 0x7a, 0x65, 0x72, + 0x6f, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x76, 0x65, 0x63, 0x33, 0x20, 0x73, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, + 0x72, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, + 0x72, 0x20, 0x2f, 0x20, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, + 0x74, 0x6f, 0x72, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6b, 0x53, 0x20, 0x69, 0x73, + 0x20, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x46, 0x72, + 0x65, 0x73, 0x6e, 0x65, 0x6c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6b, 0x53, 0x20, 0x3d, + 0x20, 0x46, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6b, 0x44, 0x20, 0x3d, 0x20, 0x76, + 0x65, 0x63, 0x33, 0x28, 0x31, 0x2e, 0x30, 0x29, 0x20, 0x2d, 0x20, 0x6b, + 0x53, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x6b, 0x44, 0x20, 0x2a, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x2d, 0x20, + 0x6d, 0x65, 0x74, 0x61, 0x6c, 0x6c, 0x69, 0x63, 0x3b, 0x0d, 0x0a, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, + 0x73, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x20, + 0x62, 0x79, 0x20, 0x4e, 0x64, 0x6f, 0x74, 0x4c, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, + 0x4e, 0x64, 0x6f, 0x74, 0x4c, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, + 0x64, 0x6f, 0x74, 0x28, 0x4e, 0x2c, 0x20, 0x4c, 0x29, 0x2c, 0x20, 0x30, + 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x4c, 0x6f, 0x20, 0x2b, 0x3d, 0x20, 0x28, 0x6b, 0x44, 0x20, + 0x2a, 0x20, 0x61, 0x6c, 0x62, 0x65, 0x64, 0x6f, 0x20, 0x2f, 0x20, 0x50, + 0x49, 0x20, 0x2b, 0x20, 0x73, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, + 0x29, 0x20, 0x2a, 0x20, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x63, 0x65, + 0x20, 0x2a, 0x20, 0x4e, 0x64, 0x6f, 0x74, 0x4c, 0x20, 0x2a, 0x20, 0x73, + 0x68, 0x61, 0x64, 0x6f, 0x77, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x68, 0x61, + 0x64, 0x6f, 0x77, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x3b, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, 0x69, 0x6e, + 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, 0x20, 0x3c, + 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x3b, + 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x69, + 0x67, 0x68, 0x74, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3d, 0x20, + 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x4c, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, - 0x7a, 0x65, 0x28, 0x75, 0x5f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x69, - 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x75, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x3b, 0x0d, 0x0a, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x20, - 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, - 0x75, 0x5f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, - 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x75, 0x5f, 0x44, - 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x4c, 0x69, - 0x67, 0x68, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x3e, - 0x20, 0x30, 0x2e, 0x31, 0x66, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, - 0x77, 0x20, 0x3d, 0x20, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x43, 0x61, - 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x77, 0x6f, - 0x72, 0x6c, 0x64, 0x50, 0x6f, 0x73, 0x2c, 0x20, 0x4e, 0x29, 0x3b, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, - 0x63, 0x33, 0x20, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x20, - 0x3d, 0x20, 0x75, 0x5f, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x61, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x43, 0x6f, 0x6c, - 0x6f, 0x72, 0x20, 0x2a, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x75, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2a, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, - 0x77, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x48, 0x20, 0x3d, 0x20, 0x6e, - 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x56, 0x20, 0x2b, - 0x20, 0x4c, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x4e, 0x44, 0x46, 0x20, - 0x3d, 0x20, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x69, - 0x6f, 0x6e, 0x47, 0x47, 0x58, 0x28, 0x4e, 0x2c, 0x20, 0x48, 0x2c, 0x20, - 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6e, 0x65, 0x73, 0x73, 0x29, 0x3b, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x20, 0x47, 0x20, 0x3d, 0x20, 0x47, 0x65, 0x6f, 0x6d, 0x65, - 0x74, 0x72, 0x79, 0x53, 0x6d, 0x69, 0x74, 0x68, 0x28, 0x4e, 0x2c, 0x20, - 0x56, 0x2c, 0x20, 0x4c, 0x2c, 0x20, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x6e, - 0x65, 0x73, 0x73, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x46, 0x20, 0x3d, 0x20, - 0x66, 0x72, 0x65, 0x73, 0x6e, 0x65, 0x6c, 0x53, 0x63, 0x68, 0x6c, 0x69, - 0x63, 0x6b, 0x28, 0x6d, 0x61, 0x78, 0x28, 0x64, 0x6f, 0x74, 0x28, 0x48, - 0x2c, 0x20, 0x56, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x2c, 0x20, - 0x46, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6e, 0x6f, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x4e, 0x44, 0x46, - 0x20, 0x2a, 0x20, 0x47, 0x20, 0x2a, 0x20, 0x46, 0x3b, 0x0d, 0x0a, 0x20, + 0x7a, 0x65, 0x28, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, + 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x2d, 0x20, + 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, 0x73, 0x29, 0x3b, 0x0d, 0x0a, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, + 0x6f, 0x61, 0x74, 0x20, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, + 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x6c, 0x69, + 0x67, 0x68, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x20, 0x2d, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, 0x73, 0x29, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x75, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x2f, + 0x20, 0x28, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x2a, + 0x20, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x29, 0x3b, 0x0d, + 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, + 0x65, 0x63, 0x33, 0x20, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x63, 0x65, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x28, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x2e, + 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x2f, + 0x2f, 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x61, 0x64, 0x69, + 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, + 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x2a, + 0x20, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, + 0x73, 0x65, 0x20, 0x69, 0x66, 0x28, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x5b, 0x69, 0x5d, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, + 0x32, 0x29, 0x20, 0x2f, 0x2f, 0x20, 0x53, 0x70, 0x6f, 0x74, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x74, 0x61, 0x20, 0x3d, + 0x20, 0x64, 0x6f, 0x74, 0x28, 0x4c, 0x2c, 0x20, 0x6e, 0x6f, 0x72, 0x6d, + 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x2d, 0x4c, 0x69, 0x67, 0x68, 0x74, + 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x29, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, - 0x20, 0x64, 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, - 0x20, 0x3d, 0x20, 0x34, 0x20, 0x2a, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x64, - 0x6f, 0x74, 0x28, 0x4e, 0x2c, 0x20, 0x56, 0x29, 0x2c, 0x20, 0x30, 0x2e, - 0x30, 0x29, 0x20, 0x2a, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x64, 0x6f, 0x74, - 0x28, 0x4e, 0x2c, 0x20, 0x4c, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, - 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x3b, 0x20, 0x2f, 0x2f, - 0x20, 0x30, 0x2e, 0x30, 0x30, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x70, 0x72, - 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x64, 0x69, 0x76, 0x69, 0x64, 0x65, - 0x20, 0x62, 0x79, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x2e, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, - 0x73, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x20, 0x3d, 0x20, 0x6e, - 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x2f, 0x20, 0x64, - 0x65, 0x6e, 0x6f, 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x6f, 0x72, 0x3b, 0x0d, - 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, - 0x2f, 0x20, 0x6b, 0x53, 0x20, 0x69, 0x73, 0x20, 0x65, 0x71, 0x75, 0x61, - 0x6c, 0x20, 0x74, 0x6f, 0x20, 0x46, 0x72, 0x65, 0x73, 0x6e, 0x65, 0x6c, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, - 0x63, 0x33, 0x20, 0x6b, 0x53, 0x20, 0x3d, 0x20, 0x46, 0x3b, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, - 0x20, 0x6b, 0x44, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x31, - 0x2e, 0x30, 0x29, 0x20, 0x2d, 0x20, 0x6b, 0x53, 0x3b, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6b, 0x44, 0x20, 0x2a, 0x3d, - 0x20, 0x31, 0x2e, 0x30, 0x20, 0x2d, 0x20, 0x6d, 0x65, 0x74, 0x61, 0x6c, - 0x6c, 0x69, 0x63, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, - 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x62, 0x79, 0x20, 0x4e, 0x64, - 0x6f, 0x74, 0x4c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x4e, 0x64, 0x6f, 0x74, 0x4c, - 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x64, 0x6f, 0x74, 0x28, 0x4e, - 0x2c, 0x20, 0x4c, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x4c, 0x6f, 0x20, - 0x2b, 0x3d, 0x20, 0x28, 0x6b, 0x44, 0x20, 0x2a, 0x20, 0x61, 0x6c, 0x62, - 0x65, 0x64, 0x6f, 0x20, 0x2f, 0x20, 0x50, 0x49, 0x20, 0x2b, 0x20, 0x73, - 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x29, 0x20, 0x2a, 0x20, 0x72, - 0x61, 0x64, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x2a, 0x20, 0x4e, 0x64, - 0x6f, 0x74, 0x4c, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, - 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x28, - 0x69, 0x6e, 0x74, 0x20, 0x69, 0x20, 0x3d, 0x20, 0x30, 0x3b, 0x20, 0x69, - 0x20, 0x3c, 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x43, 0x6f, 0x75, 0x6e, - 0x74, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x20, - 0x3d, 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x3b, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, - 0x63, 0x33, 0x20, 0x4c, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, - 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, - 0x69, 0x5d, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x2d, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, 0x73, 0x29, 0x3b, - 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, - 0x63, 0x65, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, - 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x2d, 0x20, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, - 0x73, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6e, - 0x75, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, - 0x20, 0x2f, 0x20, 0x28, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, - 0x20, 0x2a, 0x20, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x29, - 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, - 0x63, 0x65, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x28, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, - 0x5d, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, - 0x20, 0x2f, 0x2f, 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x61, - 0x64, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x4c, 0x69, 0x67, - 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x43, 0x6f, 0x6c, 0x6f, 0x72, - 0x20, 0x2a, 0x20, 0x61, 0x74, 0x74, 0x65, 0x6e, 0x75, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x20, 0x69, 0x66, 0x28, 0x4c, 0x69, 0x67, 0x68, - 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x20, 0x3d, - 0x3d, 0x20, 0x32, 0x29, 0x20, 0x2f, 0x2f, 0x20, 0x53, 0x70, 0x6f, 0x74, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x68, 0x65, 0x74, 0x61, - 0x20, 0x3d, 0x20, 0x64, 0x6f, 0x74, 0x28, 0x4c, 0x2c, 0x20, 0x6e, 0x6f, - 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x2d, 0x4c, 0x69, 0x67, - 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, - 0x61, 0x74, 0x20, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x20, - 0x20, 0x3d, 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, - 0x2e, 0x49, 0x6e, 0x6e, 0x65, 0x72, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x20, - 0x2d, 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x2e, - 0x4f, 0x75, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x3b, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, - 0x73, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, - 0x28, 0x28, 0x74, 0x68, 0x65, 0x74, 0x61, 0x20, 0x2d, 0x20, 0x4c, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x4f, 0x75, 0x74, 0x65, - 0x72, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x29, 0x20, 0x2f, 0x20, 0x65, 0x70, - 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, - 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x0d, 0x0a, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x2b, 0x3d, 0x20, 0x53, - 0x68, 0x61, 0x64, 0x6f, 0x77, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x70, 0x6f, 0x74, 0x28, 0x77, 0x6f, 0x72, - 0x6c, 0x64, 0x50, 0x6f, 0x73, 0x2c, 0x20, 0x4e, 0x2c, 0x20, 0x4c, 0x69, - 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0d, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, - 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x43, 0x6f, - 0x6c, 0x6f, 0x72, 0x20, 0x2a, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x74, 0x79, 0x20, 0x2a, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, + 0x20, 0x65, 0x70, 0x73, 0x69, 0x6c, 0x6f, 0x6e, 0x20, 0x20, 0x20, 0x3d, + 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x49, + 0x6e, 0x6e, 0x65, 0x72, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x2d, 0x20, + 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x4f, 0x75, + 0x74, 0x65, 0x72, 0x41, 0x6e, 0x67, 0x6c, 0x65, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x74, 0x79, 0x20, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x28, + 0x74, 0x68, 0x65, 0x74, 0x61, 0x20, 0x2d, 0x20, 0x4c, 0x69, 0x67, 0x68, + 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x41, + 0x6e, 0x67, 0x6c, 0x65, 0x29, 0x20, 0x2f, 0x20, 0x65, 0x70, 0x73, 0x69, + 0x6c, 0x6f, 0x6e, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, + 0x30, 0x29, 0x3b, 0x20, 0x20, 0x20, 0x20, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, + 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x32, + 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x66, 0x3b, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, + 0x28, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x43, 0x61, 0x73, 0x74, 0x53, + 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x3e, 0x20, 0x30, 0x20, 0x26, 0x26, + 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2e, 0x53, 0x68, 0x61, 0x64, 0x6f, + 0x77, 0x4d, 0x61, 0x70, 0x49, 0x44, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x29, + 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x68, 0x61, + 0x64, 0x6f, 0x77, 0x32, 0x20, 0x3d, 0x20, 0x53, 0x68, 0x61, 0x64, 0x6f, + 0x77, 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x53, 0x70, 0x6f, 0x74, 0x28, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, + 0x73, 0x2c, 0x20, 0x4e, 0x2c, 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, + 0x5b, 0x69, 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0d, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x72, 0x61, 0x64, 0x69, 0x61, 0x6e, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x4c, + 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x69, 0x5d, 0x2e, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x20, 0x2a, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e, 0x73, 0x69, + 0x74, 0x79, 0x20, 0x2a, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x32, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x43, 0x6f, 0x6f, 0x6b, 0x2d, 0x54, 0x6f, 0x72, 0x72, @@ -269473,45 +269487,45 @@ const std::string Resources_Shaders_deferred_shader_path = R"(Resources/Shaders/ 0x41, 0x6d, 0x62, 0x69, 0x65, 0x6e, 0x74, 0x54, 0x65, 0x72, 0x6d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x28, 0x61, 0x6d, 0x62, 0x69, - 0x65, 0x6e, 0x74, 0x29, 0x20, 0x2b, 0x20, 0x4c, 0x6f, 0x3b, 0x0d, 0x0a, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x20, 0x43, 0x53, 0x4d, 0x20, 0x73, 0x70, 0x6c, - 0x69, 0x74, 0x73, 0x2e, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, - 0x2a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x65, 0x70, 0x74, 0x68, - 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x77, 0x6f, - 0x72, 0x6c, 0x64, 0x50, 0x6f, 0x73, 0x20, 0x2d, 0x20, 0x75, 0x5f, 0x45, - 0x79, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x3b, - 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, 0x61, - 0x73, 0x63, 0x61, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x47, 0x65, 0x74, 0x43, - 0x53, 0x4d, 0x44, 0x65, 0x70, 0x74, 0x68, 0x28, 0x64, 0x65, 0x70, 0x74, - 0x68, 0x2c, 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x30, 0x5d, - 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, - 0x63, 0x61, 0x73, 0x63, 0x61, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x30, - 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x2a, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, - 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, - 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, - 0x20, 0x28, 0x63, 0x61, 0x73, 0x63, 0x61, 0x64, 0x65, 0x20, 0x3d, 0x3d, - 0x20, 0x31, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x2a, 0x3d, 0x20, 0x76, 0x65, - 0x63, 0x33, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x2c, - 0x20, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x69, 0x66, 0x20, 0x28, 0x63, 0x61, 0x73, 0x63, 0x61, 0x64, 0x65, 0x20, - 0x3d, 0x3d, 0x20, 0x32, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x2a, 0x3d, 0x20, - 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, - 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x61, 0x73, 0x63, 0x61, 0x64, - 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x2a, - 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, - 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, - 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x6f, 0x6c, 0x6f, 0x72, - 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x7d + 0x65, 0x6e, 0x74, 0x29, 0x20, 0x2b, 0x20, 0x4c, 0x6f, 0x20, 0x3b, 0x0d, + 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x44, 0x69, + 0x73, 0x70, 0x6c, 0x61, 0x79, 0x20, 0x43, 0x53, 0x4d, 0x20, 0x73, 0x70, + 0x6c, 0x69, 0x74, 0x73, 0x2e, 0x2e, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x2f, 0x2a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64, 0x65, 0x70, 0x74, + 0x68, 0x20, 0x3d, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x28, 0x77, + 0x6f, 0x72, 0x6c, 0x64, 0x50, 0x6f, 0x73, 0x20, 0x2d, 0x20, 0x75, 0x5f, + 0x45, 0x79, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, + 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x63, + 0x61, 0x73, 0x63, 0x61, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x47, 0x65, 0x74, + 0x43, 0x53, 0x4d, 0x44, 0x65, 0x70, 0x74, 0x68, 0x28, 0x64, 0x65, 0x70, + 0x74, 0x68, 0x2c, 0x20, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x73, 0x5b, 0x30, + 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, + 0x28, 0x63, 0x61, 0x73, 0x63, 0x61, 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, + 0x30, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x2a, 0x3d, 0x20, 0x76, 0x65, 0x63, + 0x33, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, + 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, + 0x66, 0x20, 0x28, 0x63, 0x61, 0x73, 0x63, 0x61, 0x64, 0x65, 0x20, 0x3d, + 0x3d, 0x20, 0x31, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x2a, 0x3d, 0x20, 0x76, + 0x65, 0x63, 0x33, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, + 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x61, 0x73, 0x63, 0x61, 0x64, 0x65, + 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x2a, 0x3d, + 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, + 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x61, 0x73, 0x63, 0x61, + 0x64, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x33, 0x29, 0x0d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, + 0x2a, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x2e, 0x30, 0x2c, + 0x20, 0x31, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0d, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, + 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x6f, 0x6c, 0x6f, + 0x72, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x7d }; - unsigned int Resources_Shaders_deferred_shader_len = 11830; + unsigned int Resources_Shaders_deferred_shader_len = 11999; // Data for file: Resources_Shaders_depth_aware_blur_shader_path const std::string Resources_Shaders_depth_aware_blur_shader_path = R"(Resources/Shaders/depth_aware_blur.shader)"; diff --git a/Nuake/src/Scene/Components/LightComponent.cpp b/Nuake/src/Scene/Components/LightComponent.cpp index 0e288371..3b3eaf44 100644 --- a/Nuake/src/Scene/Components/LightComponent.cpp +++ b/Nuake/src/Scene/Components/LightComponent.cpp @@ -49,7 +49,7 @@ namespace Nuake } else if(Type == LightType::Spot) { - return glm::perspectiveFov(glm::radians(OuterCutoff * 2.0f), 1.0f, 1.0f, 0.01f, 100.5f); + return glm::perspectiveFov(glm::radians(OuterCutoff * 2.5f), 1.0f, 1.0f, 0.001f, 50.5f); } } diff --git a/Resources/Shaders/deferred.shader b/Resources/Shaders/deferred.shader index 3ae1f981..d9e3fd42 100644 --- a/Resources/Shaders/deferred.shader +++ b/Resources/Shaders/deferred.shader @@ -155,7 +155,7 @@ int GetCSMDepth(float depth) float SampleShadowMap(sampler2D shadowMap, vec2 coords, float compare) { - return step(compare, texture(shadowMap, coords.xy).r); + return compare < texture(shadowMap, coords.xy).r ? 1.0f : 0.0f; } float SampleShadowMapLinear(sampler2D shadowMap, vec2 coords, float compare, vec2 texelSize) @@ -242,7 +242,7 @@ float ShadowCalculationSpot(vec3 FragPos, vec3 normal, Light light) float bias = max(0.0005 * (1.0 - dot(normal, light.Direction)), 0.0005); //float pcfDepth = texture(ShadowMaps[shadowmap], vec3(projCoords.xy, currentDepth), bias); - return SampleShadowMap(SpotShadowMaps[light.ShadowMapID], projCoords.xy, currentDepth - bias); + return SampleShadowMap(SpotShadowMaps[light.ShadowMapID], projCoords.xy, currentDepth - 0.000005); } void main() @@ -292,7 +292,7 @@ void main() vec3 Lo = vec3(0.0); vec3 fog = vec3(0.0); - float shadow = 0.0f; + float shadow = 1.0f; if (u_DirectionalLight.Shadow < 0.1f) { @@ -309,10 +309,10 @@ void main() if(u_DirectionalLight.Shadow > 0.1f) { - shadow += ShadowCalculation(worldPos, N); + shadow *= ShadowCalculation(worldPos, N); } - vec3 radiance = u_DirectionalLight.Color * attenuation * shadow; + vec3 radiance = u_DirectionalLight.Color * attenuation; vec3 H = normalize(V + L); float NDF = DistributionGGX(N, H, roughness); @@ -330,9 +330,10 @@ void main() // scale light by NdotL float NdotL = max(dot(N, L), 0.0); - Lo += (kD * albedo / PI + specular) * radiance * NdotL; + Lo += (kD * albedo / PI + specular) * radiance * NdotL * shadow; } + shadow = 1.0f; for (int i = 0; i < LightCount; i++) { Light light = Lights[i]; @@ -352,9 +353,13 @@ void main() float epsilon = Lights[i].InnerAngle - Lights[i].OuterAngle; float intensity = clamp((theta - Lights[i].OuterAngle) / epsilon, 0.0, 1.0); - shadow += ShadowCalculationSpot(worldPos, N, Lights[i]); + float shadow2 = 1.0f; + if(light.CastShadow > 0 && light.ShadowMapID >= 0) + { + shadow2 = ShadowCalculationSpot(worldPos, N, Lights[i]); + } - radiance = Lights[i].Color * intensity * shadow; + radiance = Lights[i].Color * intensity * shadow2; } // Cook-Torrance BRDF @@ -385,7 +390,7 @@ void main() kD *= 1.0 - metallic; vec3 ambient = (albedo) * ao * ssao * u_AmbientTerm; - vec3 color = (ambient) + Lo; + vec3 color = (ambient) + Lo ; // Display CSM splits.. /*float depth = length(worldPos - u_EyePosition);