From 94c4f8782e14eb8517ce5229e84717a4a17de236 Mon Sep 17 00:00:00 2001 From: water Date: Thu, 2 Nov 2023 19:09:41 -0400 Subject: [PATCH] switch slime lut to a texture --- decompiler/config/jak2/jak2_config.jsonc | 2 +- .../opengl_renderer/TextureAnimator.cpp | 18 ++ .../opengl_renderer/TextureAnimator.h | 1 + .../opengl_renderer/shaders/tex_anim.frag | 262 +----------------- game/graphics/opengl_renderer/slime_lut.h | 89 ++++++ 5 files changed, 111 insertions(+), 261 deletions(-) create mode 100644 game/graphics/opengl_renderer/slime_lut.h diff --git a/decompiler/config/jak2/jak2_config.jsonc b/decompiler/config/jak2/jak2_config.jsonc index 60b04da07e..c8a3fc49b5 100644 --- a/decompiler/config/jak2/jak2_config.jsonc +++ b/decompiler/config/jak2/jak2_config.jsonc @@ -19,7 +19,7 @@ "disassemble_code": false, // Run the decompiler - "decompile_code": true, + "decompile_code": false, "find_functions": true, diff --git a/game/graphics/opengl_renderer/TextureAnimator.cpp b/game/graphics/opengl_renderer/TextureAnimator.cpp index a027523623..5b8a4f1302 100644 --- a/game/graphics/opengl_renderer/TextureAnimator.cpp +++ b/game/graphics/opengl_renderer/TextureAnimator.cpp @@ -5,6 +5,7 @@ #include "common/util/FileUtil.h" #include "common/util/Timer.h" +#include "game/graphics/opengl_renderer/slime_lut.h" #include "game/graphics/texture/TexturePool.h" #include "third-party/imgui/imgui.h" @@ -428,6 +429,19 @@ TextureAnimator::TextureAnimator(ShaderLibrary& shaders, const tfrag3::Level* co glGenerateMipmap(GL_TEXTURE_2D); glBindTexture(GL_TEXTURE_2D, 0); + // create the slime LUT texture + glGenTextures(1, &m_slime_lut_texture); + glBindTexture(GL_TEXTURE_1D, m_slime_lut_texture); + std::vector slime_data; + for (auto x : kSlimeLutData) { + slime_data.push_back(x * 255); + } + glTexImage1D(GL_TEXTURE_1D, 0, GL_RGBA, 256, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8_REV, + slime_data.data()); + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glBindTexture(GL_TEXTURE_2D, 0); + shader.activate(); // generate CLUT table. @@ -2751,6 +2765,10 @@ void TextureAnimator::run_slime(const SlimeInput& input) { float uv[2 * 4] = {0, 0, 1, 0, 1, 1, 0, 1}; glUniform2fv(m_uniforms.uvs, 4, uv); + glActiveTexture(GL_TEXTURE10); + glBindTexture(GL_TEXTURE_1D, m_slime_lut_texture); + glActiveTexture(GL_TEXTURE0); + // Anim 1: // noise (16x16) // while (noise_layer_idx) { diff --git a/game/graphics/opengl_renderer/TextureAnimator.h b/game/graphics/opengl_renderer/TextureAnimator.h index b32d9c6315..35f7ff0f77 100644 --- a/game/graphics/opengl_renderer/TextureAnimator.h +++ b/game/graphics/opengl_renderer/TextureAnimator.h @@ -348,6 +348,7 @@ class TextureAnimator { GLuint m_shader_id; GLuint m_dummy_texture; + GLuint m_slime_lut_texture; u8 m_index_to_clut_addr[256]; OpenGLTexturePool m_opengl_texture_pool; diff --git a/game/graphics/opengl_renderer/shaders/tex_anim.frag b/game/graphics/opengl_renderer/shaders/tex_anim.frag index 0111d4f781..8a30b96596 100644 --- a/game/graphics/opengl_renderer/shaders/tex_anim.frag +++ b/game/graphics/opengl_renderer/shaders/tex_anim.frag @@ -14,6 +14,7 @@ uniform float slime_scroll; in vec2 uv; uniform sampler2D tex_T0; +uniform sampler1D tex_T10; float cloud_lookup(float v, float minimum, float maximum) { maximum = max(minimum, maximum); @@ -29,265 +30,6 @@ float cloud_lookup(float v, float minimum, float maximum) { return sin_alpha * sin_alpha; } -vec4 slime_lut[256] = vec4[]( - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3254, 0.3333, 0.0745, 0.5019), - vec4(0.3333, 0.3450, 0.0745, 0.5019), - vec4(0.3411, 0.3607, 0.0745, 0.5019), - vec4(0.3490, 0.3725, 0.0745, 0.5019), - vec4(0.3568, 0.3882, 0.0745, 0.5019), - vec4(0.3607, 0.4000, 0.0745, 0.5019), - vec4(0.3686, 0.4117, 0.0745, 0.5019), - vec4(0.3764, 0.4274, 0.0745, 0.5019), - vec4(0.3764, 0.4274, 0.0784, 0.5019), - vec4(0.3686, 0.4117, 0.0745, 0.5019), - vec4(0.3607, 0.4000, 0.0745, 0.5019), - vec4(0.3529, 0.3843, 0.0745, 0.5019), - vec4(0.3490, 0.3725, 0.0745, 0.5019), - vec4(0.3411, 0.3607, 0.0745, 0.5019), - vec4(0.3333, 0.3450, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3215, 0.0745, 0.5019), - vec4(0.3215, 0.3254, 0.0705, 0.5019), - vec4(0.3254, 0.3294, 0.0705, 0.5019), - vec4(0.3294, 0.3333, 0.0705, 0.5019), - vec4(0.3333, 0.3372, 0.0705, 0.5019), - vec4(0.3333, 0.3450, 0.0705, 0.5019), - vec4(0.3372, 0.3490, 0.0705, 0.5019), - vec4(0.3411, 0.3529, 0.0705, 0.5019), - vec4(0.3450, 0.3568, 0.0705, 0.5019), - vec4(0.3450, 0.3607, 0.0705, 0.5019), - vec4(0.3490, 0.3686, 0.0705, 0.5019), - vec4(0.3529, 0.3725, 0.0705, 0.5019), - vec4(0.3568, 0.3764, 0.0705, 0.5019), - vec4(0.3607, 0.3803, 0.0705, 0.5019), - vec4(0.3607, 0.3843, 0.0705, 0.5019), - vec4(0.3647, 0.3921, 0.0705, 0.5019), - vec4(0.3686, 0.3960, 0.0705, 0.5019), - vec4(0.3725, 0.4000, 0.0705, 0.5019), - vec4(0.3725, 0.4039, 0.0705, 0.5019), - vec4(0.3764, 0.4078, 0.0705, 0.5019), - vec4(0.3803, 0.4156, 0.0705, 0.5019), - vec4(0.3843, 0.4196, 0.0705, 0.5019), - vec4(0.3882, 0.4235, 0.0705, 0.5019), - vec4(0.3882, 0.4274, 0.0705, 0.5019), - vec4(0.3921, 0.4313, 0.0705, 0.5019), - vec4(0.3960, 0.4392, 0.0705, 0.5019), - vec4(0.4000, 0.4431, 0.0705, 0.5019), - vec4(0.4000, 0.4470, 0.0705, 0.5019), - vec4(0.4039, 0.4509, 0.0705, 0.5019), - vec4(0.4078, 0.4549, 0.0705, 0.5019), - vec4(0.4117, 0.4627, 0.0705, 0.5019), - vec4(0.4117, 0.4666, 0.0705, 0.5019), - vec4(0.4235, 0.4862, 0.0705, 0.5019), - vec4(0.4509, 0.5254, 0.0705, 0.5019), - vec4(0.4784, 0.5686, 0.0705, 0.5019), - vec4(0.5058, 0.6117, 0.0666, 0.5019), - vec4(0.5333, 0.6509, 0.0666, 0.5019), - vec4(0.5607, 0.6941, 0.0666, 0.5019), - vec4(0.5882, 0.7372, 0.0666, 0.5019), - vec4(0.6196, 0.7803, 0.0666, 0.5019), - vec4(0.6196, 0.7803, 0.0666, 0.5019), - vec4(0.6000, 0.7529, 0.0666, 0.5019), - vec4(0.5803, 0.7254, 0.0666, 0.5019), - vec4(0.5647, 0.6980, 0.0666, 0.5019), - vec4(0.5450, 0.6705, 0.0666, 0.5019), - vec4(0.5294, 0.6431, 0.0666, 0.5019), - vec4(0.5098, 0.6156, 0.0705, 0.5019), - vec4(0.4745, 0.5607, 0.0705, 0.5019), - vec4(0.4666, 0.5450, 0.0705, 0.5019), - vec4(0.4666, 0.5529, 0.0705, 0.5019), - vec4(0.4705, 0.5568, 0.0705, 0.5019), - vec4(0.4745, 0.5607, 0.0705, 0.5019), - vec4(0.4784, 0.5647, 0.0705, 0.5019), - vec4(0.4784, 0.5686, 0.0705, 0.5019), - vec4(0.4823, 0.5764, 0.0705, 0.5019), - vec4(0.4862, 0.5803, 0.0705, 0.5019), - vec4(0.4901, 0.5843, 0.0705, 0.5019), - vec4(0.4941, 0.5882, 0.0705, 0.5019), - vec4(0.4941, 0.5921, 0.0705, 0.5019), - vec4(0.4980, 0.6000, 0.0705, 0.5019), - vec4(0.5019, 0.6039, 0.0705, 0.5019), - vec4(0.5058, 0.6078, 0.0705, 0.5019), - vec4(0.5058, 0.6117, 0.0705, 0.5019), - vec4(0.5098, 0.6156, 0.0705, 0.5019), - vec4(0.5137, 0.6235, 0.0705, 0.5019), - vec4(0.5176, 0.6274, 0.0705, 0.5019), - vec4(0.5215, 0.6313, 0.0705, 0.5019), - vec4(0.5215, 0.6352, 0.0705, 0.5019), - vec4(0.5254, 0.6392, 0.0705, 0.5019), - vec4(0.5294, 0.6470, 0.0705, 0.5019), - vec4(0.5333, 0.6509, 0.0705, 0.5019), - vec4(0.5333, 0.6549, 0.0705, 0.5019), - vec4(0.5372, 0.6588, 0.0705, 0.5019), - vec4(0.5411, 0.6627, 0.0705, 0.5019), - vec4(0.5450, 0.6705, 0.0705, 0.5019), - vec4(0.5450, 0.6745, 0.0705, 0.5019), - vec4(0.5490, 0.6784, 0.0705, 0.5019), - vec4(0.5529, 0.6823, 0.0705, 0.5019), - vec4(0.5568, 0.6862, 0.0705, 0.5019), - vec4(0.5607, 0.6941, 0.0705, 0.5019), - vec4(0.5607, 0.6980, 0.0705, 0.5019), - vec4(0.5725, 0.7098, 0.0666, 0.5019), - vec4(0.5803, 0.7254, 0.0666, 0.5019), - vec4(0.5882, 0.7372, 0.0666, 0.5019), - vec4(0.6000, 0.7490, 0.0666, 0.5019), - vec4(0.6078, 0.7647, 0.0666, 0.5019), - vec4(0.6156, 0.7764, 0.0666, 0.5019), - vec4(0.6274, 0.7921, 0.0666, 0.5019), - vec4(0.6274, 0.7921, 0.0666, 0.5019), - vec4(0.6196, 0.7803, 0.0666, 0.5019), - vec4(0.6117, 0.7686, 0.0666, 0.5019), - vec4(0.6039, 0.7607, 0.0666, 0.5019), - vec4(0.5960, 0.7490, 0.0666, 0.5019), - vec4(0.5882, 0.7411, 0.0705, 0.5019), - vec4(0.5803, 0.7294, 0.0705, 0.5019), - vec4(0.5647, 0.7098, 0.0705, 0.5019), - vec4(0.5647, 0.7098, 0.0705, 0.5019), - vec4(0.5607, 0.7058, 0.0705, 0.5019), - vec4(0.5568, 0.7019, 0.0705, 0.5019), - vec4(0.5529, 0.6980, 0.0705, 0.5019), - vec4(0.5529, 0.6941, 0.0705, 0.5019), - vec4(0.5490, 0.6901, 0.0745, 0.5019), - vec4(0.5450, 0.6862, 0.0745, 0.5019), - vec4(0.5411, 0.6823, 0.0745, 0.5019), - vec4(0.5411, 0.6823, 0.0745, 0.5019), - vec4(0.5372, 0.6784, 0.0745, 0.5019), - vec4(0.5333, 0.6745, 0.0745, 0.5019), - vec4(0.5294, 0.6705, 0.0745, 0.5019), - vec4(0.5294, 0.6666, 0.0745, 0.5019), - vec4(0.5254, 0.6627, 0.0745, 0.5019), - vec4(0.5215, 0.6588, 0.0745, 0.5019), - vec4(0.5176, 0.6549, 0.0745, 0.5019), - vec4(0.5176, 0.6549, 0.0745, 0.5019), - vec4(0.5137, 0.6509, 0.0745, 0.5019), - vec4(0.5098, 0.6470, 0.0784, 0.5019), - vec4(0.5058, 0.6431, 0.0784, 0.5019), - vec4(0.5058, 0.6392, 0.0784, 0.5019), - vec4(0.5019, 0.6352, 0.0784, 0.5019), - vec4(0.4980, 0.6313, 0.0784, 0.5019), - vec4(0.4941, 0.6274, 0.0784, 0.5019), - vec4(0.4941, 0.6274, 0.0784, 0.5019), - vec4(0.4901, 0.6235, 0.0784, 0.5019), - vec4(0.4862, 0.6196, 0.0784, 0.5019), - vec4(0.4823, 0.6156, 0.0784, 0.5019), - vec4(0.4823, 0.6117, 0.0784, 0.5019), - vec4(0.4784, 0.6078, 0.0784, 0.5019), - vec4(0.4745, 0.6039, 0.0784, 0.5019), - vec4(0.4745, 0.6039, 0.0823, 0.5019), - vec4(0.4745, 0.6039, 0.0823, 0.5019), - vec4(0.4862, 0.6156, 0.0784, 0.5019), - vec4(0.4980, 0.6313, 0.0784, 0.5019), - vec4(0.5098, 0.6470, 0.0784, 0.5019), - vec4(0.5215, 0.6588, 0.0745, 0.5019), - vec4(0.5333, 0.6745, 0.0745, 0.5019), - vec4(0.5450, 0.6901, 0.0745, 0.5019), - vec4(0.5568, 0.7019, 0.0705, 0.5019), - vec4(0.5686, 0.7176, 0.0705, 0.5019), - vec4(0.5803, 0.7333, 0.0705, 0.5019), - vec4(0.5921, 0.7490, 0.0705, 0.5019), - vec4(0.6039, 0.7607, 0.0666, 0.5019), - vec4(0.6156, 0.7764, 0.0666, 0.5019), - vec4(0.6274, 0.7921, 0.0666, 0.5019), - vec4(0.6392, 0.8039, 0.0627, 0.5019), - vec4(0.6509, 0.8196, 0.0627, 0.5019), - vec4(0.6745, 0.8509, 0.0627, 0.5019), - vec4(0.6705, 0.8470, 0.0627, 0.5019), - vec4(0.6666, 0.8431, 0.0627, 0.5019), - vec4(0.6627, 0.8392, 0.0627, 0.5019), - vec4(0.6588, 0.8352, 0.0627, 0.5019), - vec4(0.6588, 0.8313, 0.0627, 0.5019), - vec4(0.6549, 0.8274, 0.0627, 0.5019), - vec4(0.6509, 0.8235, 0.0627, 0.5019), - vec4(0.6470, 0.8196, 0.0627, 0.5019), - vec4(0.6431, 0.8156, 0.0627, 0.5019), - vec4(0.6431, 0.8117, 0.0627, 0.5019), - vec4(0.6392, 0.8078, 0.0627, 0.5019), - vec4(0.6352, 0.8039, 0.0666, 0.5019), - vec4(0.6313, 0.8000, 0.0666, 0.5019), - vec4(0.6274, 0.7960, 0.0666, 0.5019), - vec4(0.6274, 0.7921, 0.0666, 0.5019), - vec4(0.6235, 0.7882, 0.0666, 0.5019), - vec4(0.6196, 0.7843, 0.0666, 0.5019), - vec4(0.6156, 0.7803, 0.0666, 0.5019), - vec4(0.6156, 0.7764, 0.0666, 0.5019), - vec4(0.6117, 0.7725, 0.0666, 0.5019), - vec4(0.6078, 0.7686, 0.0666, 0.5019), - vec4(0.6039, 0.7647, 0.0666, 0.5019), - vec4(0.6000, 0.7607, 0.0666, 0.5019), - vec4(0.6000, 0.7568, 0.0666, 0.5019), - vec4(0.5960, 0.7529, 0.0705, 0.5019), - vec4(0.5921, 0.7490, 0.0705, 0.5019), - vec4(0.5882, 0.7450, 0.0705, 0.5019), - vec4(0.5843, 0.7411, 0.0705, 0.5019), - vec4(0.5843, 0.7372, 0.0705, 0.5019), - vec4(0.5803, 0.7333, 0.0705, 0.5019), - vec4(0.5764, 0.7294, 0.0705, 0.5019), - vec4(0.5725, 0.7254, 0.0705, 0.5019), - vec4(0.5686, 0.7215, 0.0705, 0.5019), - vec4(0.5686, 0.7176, 0.0705, 0.5019), - vec4(0.5647, 0.7137, 0.0705, 0.5019), - vec4(0.5607, 0.7098, 0.0705, 0.5019), - vec4(0.5568, 0.7058, 0.0705, 0.5019), - vec4(0.5568, 0.7019, 0.0745, 0.5019), - vec4(0.5490, 0.6941, 0.0745, 0.5019), - vec4(0.5490, 0.6941, 0.0745, 0.5019), - vec4(0.5647, 0.7137, 0.0705, 0.5019), - vec4(0.5803, 0.7294, 0.0705, 0.5019), - vec4(0.5921, 0.7490, 0.0705, 0.5019), - vec4(0.6078, 0.7647, 0.0666, 0.5019), - vec4(0.6196, 0.7843, 0.0666, 0.5019), - vec4(0.6352, 0.8000, 0.0666, 0.5019), - vec4(0.6509, 0.8196, 0.0666, 0.5019), - vec4(0.6509, 0.8196, 0.0666, 0.5019), - vec4(0.6392, 0.8039, 0.0666, 0.5019), - vec4(0.6274, 0.7921, 0.0666, 0.5019), - vec4(0.6156, 0.7764, 0.0666, 0.5019), - vec4(0.6078, 0.7647, 0.0705, 0.5019), - vec4(0.5960, 0.7490, 0.0705, 0.5019), - vec4(0.5843, 0.7372, 0.0705, 0.5019), - vec4(0.5647, 0.7098, 0.0745, 0.5019), - vec4(0.5647, 0.7098, 0.0745, 0.5019), - vec4(0.5647, 0.7098, 0.0745, 0.5019), - vec4(0.5647, 0.7098, 0.0745, 0.5019), - vec4(0.5647, 0.7098, 0.0745, 0.5019), - vec4(0.5647, 0.7098, 0.0745, 0.5019), - vec4(0.5647, 0.7098, 0.0745, 0.5019), - vec4(0.5647, 0.7098, 0.0745, 0.5019), - vec4(0.5647, 0.7098, 0.0745, 0.5019) -); - void main() { if (enable_tex == 1) { vec4 tex_color = texture(tex_T0, uv); @@ -311,7 +53,7 @@ void main() { } else if (enable_tex == 3) { // cloud version vec4 tex_color = texture(tex_T0, uv + vec2(0, slime_scroll)); - color = slime_lut[int(tex_color.r * 255.f)]; + color = texelFetch(tex_T10, int(tex_color.r * 255.f), 0); } else { color = (rgba / 128.); } diff --git a/game/graphics/opengl_renderer/slime_lut.h b/game/graphics/opengl_renderer/slime_lut.h new file mode 100644 index 0000000000..d1b248ac3a --- /dev/null +++ b/game/graphics/opengl_renderer/slime_lut.h @@ -0,0 +1,89 @@ +#pragma once + +constexpr float kSlimeLutData[4 * 256] = { + 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, + 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, + 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, + 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, + 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, + 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, + 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, + 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, + 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, + 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, + 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, 0.3254, 0.3333, 0.0745, 0.5019, + 0.3333, 0.3450, 0.0745, 0.5019, 0.3411, 0.3607, 0.0745, 0.5019, 0.3490, 0.3725, 0.0745, 0.5019, + 0.3568, 0.3882, 0.0745, 0.5019, 0.3607, 0.4000, 0.0745, 0.5019, 0.3686, 0.4117, 0.0745, 0.5019, + 0.3764, 0.4274, 0.0745, 0.5019, 0.3764, 0.4274, 0.0784, 0.5019, 0.3686, 0.4117, 0.0745, 0.5019, + 0.3607, 0.4000, 0.0745, 0.5019, 0.3529, 0.3843, 0.0745, 0.5019, 0.3490, 0.3725, 0.0745, 0.5019, + 0.3411, 0.3607, 0.0745, 0.5019, 0.3333, 0.3450, 0.0745, 0.5019, 0.3215, 0.3215, 0.0745, 0.5019, + 0.3215, 0.3215, 0.0745, 0.5019, 0.3215, 0.3254, 0.0705, 0.5019, 0.3254, 0.3294, 0.0705, 0.5019, + 0.3294, 0.3333, 0.0705, 0.5019, 0.3333, 0.3372, 0.0705, 0.5019, 0.3333, 0.3450, 0.0705, 0.5019, + 0.3372, 0.3490, 0.0705, 0.5019, 0.3411, 0.3529, 0.0705, 0.5019, 0.3450, 0.3568, 0.0705, 0.5019, + 0.3450, 0.3607, 0.0705, 0.5019, 0.3490, 0.3686, 0.0705, 0.5019, 0.3529, 0.3725, 0.0705, 0.5019, + 0.3568, 0.3764, 0.0705, 0.5019, 0.3607, 0.3803, 0.0705, 0.5019, 0.3607, 0.3843, 0.0705, 0.5019, + 0.3647, 0.3921, 0.0705, 0.5019, 0.3686, 0.3960, 0.0705, 0.5019, 0.3725, 0.4000, 0.0705, 0.5019, + 0.3725, 0.4039, 0.0705, 0.5019, 0.3764, 0.4078, 0.0705, 0.5019, 0.3803, 0.4156, 0.0705, 0.5019, + 0.3843, 0.4196, 0.0705, 0.5019, 0.3882, 0.4235, 0.0705, 0.5019, 0.3882, 0.4274, 0.0705, 0.5019, + 0.3921, 0.4313, 0.0705, 0.5019, 0.3960, 0.4392, 0.0705, 0.5019, 0.4000, 0.4431, 0.0705, 0.5019, + 0.4000, 0.4470, 0.0705, 0.5019, 0.4039, 0.4509, 0.0705, 0.5019, 0.4078, 0.4549, 0.0705, 0.5019, + 0.4117, 0.4627, 0.0705, 0.5019, 0.4117, 0.4666, 0.0705, 0.5019, 0.4235, 0.4862, 0.0705, 0.5019, + 0.4509, 0.5254, 0.0705, 0.5019, 0.4784, 0.5686, 0.0705, 0.5019, 0.5058, 0.6117, 0.0666, 0.5019, + 0.5333, 0.6509, 0.0666, 0.5019, 0.5607, 0.6941, 0.0666, 0.5019, 0.5882, 0.7372, 0.0666, 0.5019, + 0.6196, 0.7803, 0.0666, 0.5019, 0.6196, 0.7803, 0.0666, 0.5019, 0.6000, 0.7529, 0.0666, 0.5019, + 0.5803, 0.7254, 0.0666, 0.5019, 0.5647, 0.6980, 0.0666, 0.5019, 0.5450, 0.6705, 0.0666, 0.5019, + 0.5294, 0.6431, 0.0666, 0.5019, 0.5098, 0.6156, 0.0705, 0.5019, 0.4745, 0.5607, 0.0705, 0.5019, + 0.4666, 0.5450, 0.0705, 0.5019, 0.4666, 0.5529, 0.0705, 0.5019, 0.4705, 0.5568, 0.0705, 0.5019, + 0.4745, 0.5607, 0.0705, 0.5019, 0.4784, 0.5647, 0.0705, 0.5019, 0.4784, 0.5686, 0.0705, 0.5019, + 0.4823, 0.5764, 0.0705, 0.5019, 0.4862, 0.5803, 0.0705, 0.5019, 0.4901, 0.5843, 0.0705, 0.5019, + 0.4941, 0.5882, 0.0705, 0.5019, 0.4941, 0.5921, 0.0705, 0.5019, 0.4980, 0.6000, 0.0705, 0.5019, + 0.5019, 0.6039, 0.0705, 0.5019, 0.5058, 0.6078, 0.0705, 0.5019, 0.5058, 0.6117, 0.0705, 0.5019, + 0.5098, 0.6156, 0.0705, 0.5019, 0.5137, 0.6235, 0.0705, 0.5019, 0.5176, 0.6274, 0.0705, 0.5019, + 0.5215, 0.6313, 0.0705, 0.5019, 0.5215, 0.6352, 0.0705, 0.5019, 0.5254, 0.6392, 0.0705, 0.5019, + 0.5294, 0.6470, 0.0705, 0.5019, 0.5333, 0.6509, 0.0705, 0.5019, 0.5333, 0.6549, 0.0705, 0.5019, + 0.5372, 0.6588, 0.0705, 0.5019, 0.5411, 0.6627, 0.0705, 0.5019, 0.5450, 0.6705, 0.0705, 0.5019, + 0.5450, 0.6745, 0.0705, 0.5019, 0.5490, 0.6784, 0.0705, 0.5019, 0.5529, 0.6823, 0.0705, 0.5019, + 0.5568, 0.6862, 0.0705, 0.5019, 0.5607, 0.6941, 0.0705, 0.5019, 0.5607, 0.6980, 0.0705, 0.5019, + 0.5725, 0.7098, 0.0666, 0.5019, 0.5803, 0.7254, 0.0666, 0.5019, 0.5882, 0.7372, 0.0666, 0.5019, + 0.6000, 0.7490, 0.0666, 0.5019, 0.6078, 0.7647, 0.0666, 0.5019, 0.6156, 0.7764, 0.0666, 0.5019, + 0.6274, 0.7921, 0.0666, 0.5019, 0.6274, 0.7921, 0.0666, 0.5019, 0.6196, 0.7803, 0.0666, 0.5019, + 0.6117, 0.7686, 0.0666, 0.5019, 0.6039, 0.7607, 0.0666, 0.5019, 0.5960, 0.7490, 0.0666, 0.5019, + 0.5882, 0.7411, 0.0705, 0.5019, 0.5803, 0.7294, 0.0705, 0.5019, 0.5647, 0.7098, 0.0705, 0.5019, + 0.5647, 0.7098, 0.0705, 0.5019, 0.5607, 0.7058, 0.0705, 0.5019, 0.5568, 0.7019, 0.0705, 0.5019, + 0.5529, 0.6980, 0.0705, 0.5019, 0.5529, 0.6941, 0.0705, 0.5019, 0.5490, 0.6901, 0.0745, 0.5019, + 0.5450, 0.6862, 0.0745, 0.5019, 0.5411, 0.6823, 0.0745, 0.5019, 0.5411, 0.6823, 0.0745, 0.5019, + 0.5372, 0.6784, 0.0745, 0.5019, 0.5333, 0.6745, 0.0745, 0.5019, 0.5294, 0.6705, 0.0745, 0.5019, + 0.5294, 0.6666, 0.0745, 0.5019, 0.5254, 0.6627, 0.0745, 0.5019, 0.5215, 0.6588, 0.0745, 0.5019, + 0.5176, 0.6549, 0.0745, 0.5019, 0.5176, 0.6549, 0.0745, 0.5019, 0.5137, 0.6509, 0.0745, 0.5019, + 0.5098, 0.6470, 0.0784, 0.5019, 0.5058, 0.6431, 0.0784, 0.5019, 0.5058, 0.6392, 0.0784, 0.5019, + 0.5019, 0.6352, 0.0784, 0.5019, 0.4980, 0.6313, 0.0784, 0.5019, 0.4941, 0.6274, 0.0784, 0.5019, + 0.4941, 0.6274, 0.0784, 0.5019, 0.4901, 0.6235, 0.0784, 0.5019, 0.4862, 0.6196, 0.0784, 0.5019, + 0.4823, 0.6156, 0.0784, 0.5019, 0.4823, 0.6117, 0.0784, 0.5019, 0.4784, 0.6078, 0.0784, 0.5019, + 0.4745, 0.6039, 0.0784, 0.5019, 0.4745, 0.6039, 0.0823, 0.5019, 0.4745, 0.6039, 0.0823, 0.5019, + 0.4862, 0.6156, 0.0784, 0.5019, 0.4980, 0.6313, 0.0784, 0.5019, 0.5098, 0.6470, 0.0784, 0.5019, + 0.5215, 0.6588, 0.0745, 0.5019, 0.5333, 0.6745, 0.0745, 0.5019, 0.5450, 0.6901, 0.0745, 0.5019, + 0.5568, 0.7019, 0.0705, 0.5019, 0.5686, 0.7176, 0.0705, 0.5019, 0.5803, 0.7333, 0.0705, 0.5019, + 0.5921, 0.7490, 0.0705, 0.5019, 0.6039, 0.7607, 0.0666, 0.5019, 0.6156, 0.7764, 0.0666, 0.5019, + 0.6274, 0.7921, 0.0666, 0.5019, 0.6392, 0.8039, 0.0627, 0.5019, 0.6509, 0.8196, 0.0627, 0.5019, + 0.6745, 0.8509, 0.0627, 0.5019, 0.6705, 0.8470, 0.0627, 0.5019, 0.6666, 0.8431, 0.0627, 0.5019, + 0.6627, 0.8392, 0.0627, 0.5019, 0.6588, 0.8352, 0.0627, 0.5019, 0.6588, 0.8313, 0.0627, 0.5019, + 0.6549, 0.8274, 0.0627, 0.5019, 0.6509, 0.8235, 0.0627, 0.5019, 0.6470, 0.8196, 0.0627, 0.5019, + 0.6431, 0.8156, 0.0627, 0.5019, 0.6431, 0.8117, 0.0627, 0.5019, 0.6392, 0.8078, 0.0627, 0.5019, + 0.6352, 0.8039, 0.0666, 0.5019, 0.6313, 0.8000, 0.0666, 0.5019, 0.6274, 0.7960, 0.0666, 0.5019, + 0.6274, 0.7921, 0.0666, 0.5019, 0.6235, 0.7882, 0.0666, 0.5019, 0.6196, 0.7843, 0.0666, 0.5019, + 0.6156, 0.7803, 0.0666, 0.5019, 0.6156, 0.7764, 0.0666, 0.5019, 0.6117, 0.7725, 0.0666, 0.5019, + 0.6078, 0.7686, 0.0666, 0.5019, 0.6039, 0.7647, 0.0666, 0.5019, 0.6000, 0.7607, 0.0666, 0.5019, + 0.6000, 0.7568, 0.0666, 0.5019, 0.5960, 0.7529, 0.0705, 0.5019, 0.5921, 0.7490, 0.0705, 0.5019, + 0.5882, 0.7450, 0.0705, 0.5019, 0.5843, 0.7411, 0.0705, 0.5019, 0.5843, 0.7372, 0.0705, 0.5019, + 0.5803, 0.7333, 0.0705, 0.5019, 0.5764, 0.7294, 0.0705, 0.5019, 0.5725, 0.7254, 0.0705, 0.5019, + 0.5686, 0.7215, 0.0705, 0.5019, 0.5686, 0.7176, 0.0705, 0.5019, 0.5647, 0.7137, 0.0705, 0.5019, + 0.5607, 0.7098, 0.0705, 0.5019, 0.5568, 0.7058, 0.0705, 0.5019, 0.5568, 0.7019, 0.0745, 0.5019, + 0.5490, 0.6941, 0.0745, 0.5019, 0.5490, 0.6941, 0.0745, 0.5019, 0.5647, 0.7137, 0.0705, 0.5019, + 0.5803, 0.7294, 0.0705, 0.5019, 0.5921, 0.7490, 0.0705, 0.5019, 0.6078, 0.7647, 0.0666, 0.5019, + 0.6196, 0.7843, 0.0666, 0.5019, 0.6352, 0.8000, 0.0666, 0.5019, 0.6509, 0.8196, 0.0666, 0.5019, + 0.6509, 0.8196, 0.0666, 0.5019, 0.6392, 0.8039, 0.0666, 0.5019, 0.6274, 0.7921, 0.0666, 0.5019, + 0.6156, 0.7764, 0.0666, 0.5019, 0.6078, 0.7647, 0.0705, 0.5019, 0.5960, 0.7490, 0.0705, 0.5019, + 0.5843, 0.7372, 0.0705, 0.5019, 0.5647, 0.7098, 0.0745, 0.5019, 0.5647, 0.7098, 0.0745, 0.5019, + 0.5647, 0.7098, 0.0745, 0.5019, 0.5647, 0.7098, 0.0745, 0.5019, 0.5647, 0.7098, 0.0745, 0.5019, + 0.5647, 0.7098, 0.0745, 0.5019, 0.5647, 0.7098, 0.0745, 0.5019, 0.5647, 0.7098, 0.0745, 0.5019, + 0.5647, 0.7098, 0.0745, 0.5019}; \ No newline at end of file