From b2f472a2b1f36073b0070b81c08a666380ad180d Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 9 Jun 2017 13:14:55 -0500 Subject: [PATCH 001/195] SwRasterizer: Implement primary fragment color. --- src/video_core/swrasterizer/rasterizer.cpp | 119 ++++++++++++++++++++- 1 file changed, 114 insertions(+), 5 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 512e81c081..1ab41c2df3 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -13,6 +13,7 @@ #include "common/logging/log.h" #include "common/math_util.h" #include "common/microprofile.h" +#include "common/quaternion.h" #include "common/vector_math.h" #include "core/hw/gpu.h" #include "core/memory.h" @@ -114,6 +115,86 @@ static std::tuple ConvertCubeCoord(float24 u, float24 v return std::make_tuple(x / z * half + half, y / z * half + half, addr); } +std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Quaternion& normquat, const Math::Vec3& view) { + const auto& lighting = g_state.regs.lighting; + + if (lighting.disable) + return {{}, {}}; + + // TODO(Subv): Bump mapping + Math::Vec3 surface_normal = {0.0f, 0.0f, 1.0f}; + + if (lighting.config0.bump_mode != LightingRegs::LightingBumpMode::None) { + LOG_CRITICAL(HW_GPU, "unimplemented bump mapping"); + UNIMPLEMENTED(); + } + + // TODO(Subv): Do we need to normalize the quaternion here? + auto normal = Math::QuaternionRotate(normquat, surface_normal); + + Math::Vec3 light_vector = {}; + Math::Vec3 diffuse_sum = {}; + // TODO(Subv): Calculate specular + Math::Vec3 specular_sum = {}; + + for (unsigned light_index = 0; light_index <= lighting.max_light_index; ++light_index) { + unsigned num = lighting.light_enable.GetNum(light_index); + const auto& light_config = g_state.regs.lighting.light[num]; + + Math::Vec3 position = {float16::FromRaw(light_config.x).ToFloat32(), float16::FromRaw(light_config.y).ToFloat32(), float16::FromRaw(light_config.z).ToFloat32()}; + + if (light_config.config.directional) + light_vector = position; + else + light_vector = position + view; + + light_vector.Normalize(); + + auto dot_product = Math::Dot(light_vector, normal); + + if (light_config.config.two_sided_diffuse) + dot_product = std::abs(dot_product); + else + dot_product = std::max(dot_product, 0.0f); + + float dist_atten = 1.0f; + if (!lighting.IsDistAttenDisabled(num)) { + auto distance = (-view - position).Length(); + float scale = Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32(); + float bias = Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32(); + size_t lut = static_cast(LightingRegs::LightingSampler::DistanceAttenuation) + num; + + float sample_loc = scale * distance + bias; + unsigned index_i = static_cast(MathUtil::Clamp(floor(sample_loc * 256), 0.0f, 1.0f)); + + float index_f = sample_loc - index_i; + + ASSERT_MSG(lut < g_state.lighting.luts.size(), "Out of range lut"); + + float lut_value = g_state.lighting.luts[lut][index_i].ToFloat(); + float lut_diff = g_state.lighting.luts[lut][index_i].DiffToFloat(); + + dist_atten = lut_value + lut_diff * index_f; + } + + auto diffuse = light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); + diffuse_sum += diffuse * dist_atten; + } + + diffuse_sum += lighting.global_ambient.ToVec3f(); + return { + Math::MakeVec(MathUtil::Clamp(diffuse_sum.x, 0.0f, 1.0f) * 255, MathUtil::Clamp(diffuse_sum.y, 0.0f, 1.0f) * 255, MathUtil::Clamp(diffuse_sum.z, 0.0f, 1.0f) * 255, 255).Cast(), + Math::MakeVec(MathUtil::Clamp(specular_sum.x, 0.0f, 1.0f) * 255, MathUtil::Clamp(specular_sum.y, 0.0f, 1.0f) * 255, MathUtil::Clamp(specular_sum.z, 0.0f, 1.0f) * 255, 255).Cast() + }; +} + +static bool AreQuaternionsOpposite(Math::Vec4 qa, Math::Vec4 qb) { + Math::Vec4f a{ qa.x.ToFloat32(), qa.y.ToFloat32(), qa.z.ToFloat32(), qa.w.ToFloat32() }; + Math::Vec4f b{ qb.x.ToFloat32(), qb.y.ToFloat32(), qb.z.ToFloat32(), qb.w.ToFloat32() }; + + return (Math::Dot(a, b) < 0.f); +} + MICROPROFILE_DEFINE(GPU_Rasterization, "GPU", "Rasterization", MP_RGB(50, 50, 240)); /** @@ -207,6 +288,15 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve int bias2 = IsRightSideOrFlatBottomEdge(vtxpos[2].xy(), vtxpos[0].xy(), vtxpos[1].xy()) ? -1 : 0; + // Flip the quaternions if they are opposite to prevent interpolating them over the wrong direction. + auto v1_quat = v1.quat; + auto v2_quat = v2.quat; + + if (AreQuaternionsOpposite(v0.quat, v1.quat)) + v1_quat = v1_quat * float24::FromFloat32(-1.0f); + if (AreQuaternionsOpposite(v0.quat, v2.quat)) + v2_quat = v2_quat * float24::FromFloat32(-1.0f); + auto w_inverse = Math::MakeVec(v0.pos.w, v1.pos.w, v2.pos.w); auto textures = regs.texturing.GetTextures(); @@ -305,6 +395,21 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve 255), }; + Math::Quaternion normquat{ + { + GetInterpolatedAttribute(v0.quat.x, v1_quat.x, v2_quat.x).ToFloat32(), + GetInterpolatedAttribute(v0.quat.y, v1_quat.y, v2_quat.y).ToFloat32(), + GetInterpolatedAttribute(v0.quat.z, v1_quat.z, v2_quat.z).ToFloat32() + }, + GetInterpolatedAttribute(v0.quat.w, v1_quat.w, v2_quat.w).ToFloat32(), + }; + + Math::Vec3 fragment_position{ + GetInterpolatedAttribute(v0.view.x, v1.view.x, v2.view.x).ToFloat32(), + GetInterpolatedAttribute(v0.view.y, v1.view.y, v2.view.y).ToFloat32(), + GetInterpolatedAttribute(v0.view.z, v1.view.z, v2.view.z).ToFloat32() + }; + Math::Vec2 uv[3]; uv[0].u() = GetInterpolatedAttribute(v0.tc0.u(), v1.tc0.u(), v2.tc0.u()); uv[0].v() = GetInterpolatedAttribute(v0.tc0.v(), v1.tc0.v(), v2.tc0.v()); @@ -419,6 +524,11 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve regs.texturing.tev_combiner_buffer_color.a, }; + Math::Vec4 primary_fragment_color; + Math::Vec4 secondary_fragment_color; + + std::tie(primary_fragment_color, secondary_fragment_color) = ComputeFragmentsColors(normquat, fragment_position); + for (unsigned tev_stage_index = 0; tev_stage_index < tev_stages.size(); ++tev_stage_index) { const auto& tev_stage = tev_stages[tev_stage_index]; @@ -427,14 +537,13 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve auto GetSource = [&](Source source) -> Math::Vec4 { switch (source) { case Source::PrimaryColor: - - // HACK: Until we implement fragment lighting, use primary_color - case Source::PrimaryFragmentColor: return primary_color; - // HACK: Until we implement fragment lighting, use zero + case Source::PrimaryFragmentColor: + return primary_fragment_color; + case Source::SecondaryFragmentColor: - return {0, 0, 0, 0}; + return secondary_fragment_color; case Source::Texture0: return texture_color[0]; From be25e78b07140cb745387f757001dd04b3b4cc64 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 9 Jun 2017 14:25:41 -0500 Subject: [PATCH 002/195] SwRasterizer: Calculate specular_0 for fragment lighting. --- src/video_core/swrasterizer/rasterizer.cpp | 115 ++++++++++++++++++--- 1 file changed, 98 insertions(+), 17 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 1ab41c2df3..34b84b0af3 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -115,6 +115,20 @@ static std::tuple ConvertCubeCoord(float24 u, float24 v return std::make_tuple(x / z * half + half, y / z * half + half, addr); } + +float LookupLightingLut(size_t lut_index, float index) { + unsigned index_i = static_cast(MathUtil::Clamp(floor(index * 256), 0.0f, 1.0f)); + + float index_f = index - index_i; + + ASSERT_MSG(lut_index < g_state.lighting.luts.size(), "Out of range lut"); + + float lut_value = g_state.lighting.luts[lut_index][index_i].ToFloat(); + float lut_diff = g_state.lighting.luts[lut_index][index_i].DiffToFloat(); + + return lut_value + lut_diff * index_f; +} + std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Quaternion& normquat, const Math::Vec3& view) { const auto& lighting = g_state.regs.lighting; @@ -133,9 +147,9 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu auto normal = Math::QuaternionRotate(normquat, surface_normal); Math::Vec3 light_vector = {}; - Math::Vec3 diffuse_sum = {}; + Math::Vec4 diffuse_sum = {0.f, 0.f, 0.f, 1.f}; // TODO(Subv): Calculate specular - Math::Vec3 specular_sum = {}; + Math::Vec4 specular_sum = {0.f, 0.f, 0.f, 1.f}; for (unsigned light_index = 0; light_index <= lighting.max_light_index; ++light_index) { unsigned num = lighting.light_enable.GetNum(light_index); @@ -150,7 +164,8 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu light_vector.Normalize(); - auto dot_product = Math::Dot(light_vector, normal); + auto LV_N = Math::Dot(light_vector, normal); + auto dot_product = LV_N; if (light_config.config.two_sided_diffuse) dot_product = std::abs(dot_product); @@ -165,26 +180,92 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu size_t lut = static_cast(LightingRegs::LightingSampler::DistanceAttenuation) + num; float sample_loc = scale * distance + bias; - unsigned index_i = static_cast(MathUtil::Clamp(floor(sample_loc * 256), 0.0f, 1.0f)); - - float index_f = sample_loc - index_i; - - ASSERT_MSG(lut < g_state.lighting.luts.size(), "Out of range lut"); - - float lut_value = g_state.lighting.luts[lut][index_i].ToFloat(); - float lut_diff = g_state.lighting.luts[lut][index_i].DiffToFloat(); - - dist_atten = lut_value + lut_diff * index_f; + dist_atten = LookupLightingLut(lut, sample_loc); } + float clamp_highlights = 1.0f; + + if (lighting.config0.clamp_highlights) { + if (LV_N <= 0.f) + clamp_highlights = 0.f; + else + clamp_highlights = 1.f; + } + + auto GetLutIndex = [&](unsigned num, LightingRegs::LightingLutInput input, + bool abs) -> float { + + Math::Vec3 norm_view = view.Normalized(); + Math::Vec3 half_angle = (norm_view + light_vector).Normalized(); + float result = 0.0f; + + switch (input) { + case LightingRegs::LightingLutInput::NH: + result = Math::Dot(normal, half_angle); + break; + + case LightingRegs::LightingLutInput::VH: + result = Math::Dot(norm_view, half_angle); + break; + + case LightingRegs::LightingLutInput::NV: + result = Math::Dot(normal, norm_view); + break; + + case LightingRegs::LightingLutInput::LN: + result = Math::Dot(light_vector, normal); + break; + + default: + LOG_CRITICAL(HW_GPU, "Unknown lighting LUT input %d\n", (int)input); + UNIMPLEMENTED(); + result = 0.f; + } + + if (abs) { + if (light_config.config.two_sided_diffuse) + result = std::abs(result); + else + result = std::max(result, 0.0f); + } else { + if (result < 0.f) + result += 2.f; + + result /= 2.f; + } + + return MathUtil::Clamp(result, 0.0f, 1.0f); + }; + + // Specular 0 component + float d0_lut_value = 1.0f; + if (lighting.config1.disable_lut_d0 == 0 && + LightingRegs::IsLightingSamplerSupported( + lighting.config0.config, LightingRegs::LightingSampler::Distribution0)) { + + // Lookup specular "distribution 0" LUT value + float index = GetLutIndex(num, lighting.lut_input.d0.Value(), lighting.abs_lut_input.disable_d0 == 0); + + float scale = lighting.lut_scale.GetScale(lighting.lut_scale.d0); + + d0_lut_value = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::Distribution0), index); + } + + Math::Vec3 specular_0 = d0_lut_value * light_config.specular_0.ToVec3f(); + + // TODO(Subv): Specular 1 + Math::Vec3 specular_1 = {}; + auto diffuse = light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); - diffuse_sum += diffuse * dist_atten; + diffuse_sum += Math::MakeVec(diffuse * dist_atten, 0.0f); + + specular_sum += Math::MakeVec((specular_0 + specular_1) * clamp_highlights * dist_atten, 0.f); } - diffuse_sum += lighting.global_ambient.ToVec3f(); + diffuse_sum += Math::MakeVec(lighting.global_ambient.ToVec3f(), 0.0f); return { - Math::MakeVec(MathUtil::Clamp(diffuse_sum.x, 0.0f, 1.0f) * 255, MathUtil::Clamp(diffuse_sum.y, 0.0f, 1.0f) * 255, MathUtil::Clamp(diffuse_sum.z, 0.0f, 1.0f) * 255, 255).Cast(), - Math::MakeVec(MathUtil::Clamp(specular_sum.x, 0.0f, 1.0f) * 255, MathUtil::Clamp(specular_sum.y, 0.0f, 1.0f) * 255, MathUtil::Clamp(specular_sum.z, 0.0f, 1.0f) * 255, 255).Cast() + Math::MakeVec(MathUtil::Clamp(diffuse_sum.x, 0.0f, 1.0f) * 255, MathUtil::Clamp(diffuse_sum.y, 0.0f, 1.0f) * 255, MathUtil::Clamp(diffuse_sum.z, 0.0f, 1.0f) * 255, MathUtil::Clamp(diffuse_sum.w, 0.0f, 1.0f) * 255).Cast(), + Math::MakeVec(MathUtil::Clamp(specular_sum.x, 0.0f, 1.0f) * 255, MathUtil::Clamp(specular_sum.y, 0.0f, 1.0f) * 255, MathUtil::Clamp(specular_sum.z, 0.0f, 1.0f) * 255, MathUtil::Clamp(specular_sum.w, 0.0f, 1.0f) * 255).Cast() }; } From 46b8c8e1da6bc29df2662d63b0e028136fef3636 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 9 Jun 2017 14:44:02 -0500 Subject: [PATCH 003/195] SwRasterizer: Calculate specular_1 for fragment lighting. --- src/video_core/swrasterizer/rasterizer.cpp | 62 ++++++++++++++++++++-- 1 file changed, 59 insertions(+), 3 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 34b84b0af3..e0c326a4a9 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -148,8 +148,8 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu Math::Vec3 light_vector = {}; Math::Vec4 diffuse_sum = {0.f, 0.f, 0.f, 1.f}; - // TODO(Subv): Calculate specular Math::Vec4 specular_sum = {0.f, 0.f, 0.f, 1.f}; + Math::Vec3 refl_value = {}; for (unsigned light_index = 0; light_index <= lighting.max_light_index; ++light_index) { unsigned num = lighting.light_enable.GetNum(light_index); @@ -253,8 +253,64 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu Math::Vec3 specular_0 = d0_lut_value * light_config.specular_0.ToVec3f(); - // TODO(Subv): Specular 1 - Math::Vec3 specular_1 = {}; + // If enabled, lookup ReflectRed value, otherwise, 1.0 is used + if (lighting.config1.disable_lut_rr == 0 && + LightingRegs::IsLightingSamplerSupported(lighting.config0.config, + LightingRegs::LightingSampler::ReflectRed)) { + + float index = GetLutIndex(num, lighting.lut_input.rr, lighting.abs_lut_input.disable_rr == 0); + + float scale = lighting.lut_scale.GetScale(lighting.lut_scale.rr); + + refl_value.x = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectRed), index); + } else { + refl_value.x = 1.0f; + } + + // If enabled, lookup ReflectGreen value, otherwise, ReflectRed value is used + if (lighting.config1.disable_lut_rg == 0 && + LightingRegs::IsLightingSamplerSupported(lighting.config0.config, + LightingRegs::LightingSampler::ReflectGreen)) { + + float index = GetLutIndex(num, lighting.lut_input.rg, lighting.abs_lut_input.disable_rg == 0); + + float scale = lighting.lut_scale.GetScale(lighting.lut_scale.rg); + + refl_value.y = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectGreen), index); + } else { + refl_value.y = refl_value.x; + } + + // If enabled, lookup ReflectBlue value, otherwise, ReflectRed value is used + if (lighting.config1.disable_lut_rb == 0 && + LightingRegs::IsLightingSamplerSupported(lighting.config0.config, + LightingRegs::LightingSampler::ReflectBlue)) { + + float index = GetLutIndex(num, lighting.lut_input.rb, lighting.abs_lut_input.disable_rb == 0); + + float scale = lighting.lut_scale.GetScale(lighting.lut_scale.rb); + + refl_value.z = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectBlue), index); + } else { + refl_value.z = refl_value.x; + } + + float d1_lut_value = 1.0f; + if (lighting.config1.disable_lut_d1 == 0 && + LightingRegs::IsLightingSamplerSupported( + lighting.config0.config, LightingRegs::LightingSampler::Distribution1)) { + + // Lookup specular "distribution 1" LUT value + float index = GetLutIndex(num, lighting.lut_input.d1.Value(), lighting.abs_lut_input.disable_d1 == 0); + + float scale = lighting.lut_scale.GetScale(lighting.lut_scale.d1); + + d1_lut_value = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::Distribution1), index); + } + + Math::Vec3 specular_1 = d1_lut_value * refl_value * light_config.specular_1.ToVec3f(); + + // TODO(Subv): Fresnel auto diffuse = light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); diffuse_sum += Math::MakeVec(diffuse * dist_atten, 0.0f); From 10b0bea06008fea89564dc5ef8895c0274f8ef18 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 9 Jun 2017 14:55:54 -0500 Subject: [PATCH 004/195] SwRasterizer: Calculate fresnel for fragment lighting. --- src/video_core/swrasterizer/rasterizer.cpp | 26 +++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index e0c326a4a9..2d1daa24a9 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -310,7 +310,31 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu Math::Vec3 specular_1 = d1_lut_value * refl_value * light_config.specular_1.ToVec3f(); - // TODO(Subv): Fresnel + if (lighting.config1.disable_lut_fr == 0 && + LightingRegs::IsLightingSamplerSupported( + lighting.config0.config, LightingRegs::LightingSampler::Fresnel)) { + + // Lookup fresnel LUT value + float index = GetLutIndex(num, lighting.lut_input.fr.Value(), lighting.abs_lut_input.disable_fr == 0); + + float scale = lighting.lut_scale.GetScale(lighting.lut_scale.fr); + + float lut_value = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::Fresnel), index); + + // Enabled for difffuse lighting alpha component + if (lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::PrimaryAlpha || + lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { + diffuse_sum.a() *= lut_value; + } + + // Enabled for the specular lighting alpha component + if (lighting.config0.fresnel_selector == + LightingRegs::LightingFresnelSelector::SecondaryAlpha || + lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { + specular_sum.a() *= lut_value; + } + } + auto diffuse = light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); diffuse_sum += Math::MakeVec(diffuse * dist_atten, 0.0f); From 80b6fc592e3a2f5821975e84b5df35f5dc4ae51a Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 9 Jun 2017 15:24:28 -0500 Subject: [PATCH 005/195] SwRasterizer: Fixed the lighting lut lookup function. --- src/video_core/swrasterizer/rasterizer.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 2d1daa24a9..2b85ac86c6 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -117,7 +117,9 @@ static std::tuple ConvertCubeCoord(float24 u, float24 v float LookupLightingLut(size_t lut_index, float index) { - unsigned index_i = static_cast(MathUtil::Clamp(floor(index * 256), 0.0f, 1.0f)); + index *= 256; + + unsigned index_i = static_cast(MathUtil::Clamp(floor(index), 0.0f, 255.0f)); float index_f = index - index_i; @@ -126,7 +128,7 @@ float LookupLightingLut(size_t lut_index, float index) { float lut_value = g_state.lighting.luts[lut_index][index_i].ToFloat(); float lut_diff = g_state.lighting.luts[lut_index][index_i].DiffToFloat(); - return lut_value + lut_diff * index_f; + return lut_value + lut_diff * index_f / 256.f; } std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Quaternion& normquat, const Math::Vec3& view) { From f2d4d5c2191275bd91f2f42b880f3edf3bccfd63 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 9 Jun 2017 17:33:25 -0500 Subject: [PATCH 006/195] SwRasterizer: Corrected the light LUT lookups. --- src/common/quaternion.h | 5 ++ src/video_core/swrasterizer/rasterizer.cpp | 76 ++++++++++++---------- 2 files changed, 48 insertions(+), 33 deletions(-) diff --git a/src/common/quaternion.h b/src/common/quaternion.h index 84ac82ed36..77f626bcb4 100644 --- a/src/common/quaternion.h +++ b/src/common/quaternion.h @@ -30,6 +30,11 @@ public: return {xyz * other.w + other.xyz * w + Cross(xyz, other.xyz), w * other.w - Dot(xyz, other.xyz)}; } + + Quaternion Normalized() const { + T length = std::sqrt(xyz.Length2() + w * w); + return {xyz / length, w / length}; + } }; template diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 2b85ac86c6..a9098e1f09 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -115,20 +115,14 @@ static std::tuple ConvertCubeCoord(float24 u, float24 v return std::make_tuple(x / z * half + half, y / z * half + half, addr); } - -float LookupLightingLut(size_t lut_index, float index) { - index *= 256; - - unsigned index_i = static_cast(MathUtil::Clamp(floor(index), 0.0f, 255.0f)); - - float index_f = index - index_i; - +float LookupLightingLut(size_t lut_index, u8 index, float delta) { ASSERT_MSG(lut_index < g_state.lighting.luts.size(), "Out of range lut"); + ASSERT_MSG(index < g_state.lighting.luts[0].size(), "Out of range index"); - float lut_value = g_state.lighting.luts[lut_index][index_i].ToFloat(); - float lut_diff = g_state.lighting.luts[lut_index][index_i].DiffToFloat(); + float lut_value = g_state.lighting.luts[lut_index][index].ToFloat(); + float lut_diff = g_state.lighting.luts[lut_index][index].DiffToFloat(); - return lut_value + lut_diff * index_f / 256.f; + return lut_value + lut_diff * delta; } std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Quaternion& normquat, const Math::Vec3& view) { @@ -145,8 +139,8 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu UNIMPLEMENTED(); } - // TODO(Subv): Do we need to normalize the quaternion here? - auto normal = Math::QuaternionRotate(normquat, surface_normal); + // Use the normalized the quaternion when performing the rotation + auto normal = Math::QuaternionRotate(normquat.Normalized(), surface_normal); Math::Vec3 light_vector = {}; Math::Vec4 diffuse_sum = {0.f, 0.f, 0.f, 1.f}; @@ -182,7 +176,10 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu size_t lut = static_cast(LightingRegs::LightingSampler::DistanceAttenuation) + num; float sample_loc = scale * distance + bias; - dist_atten = LookupLightingLut(lut, sample_loc); + + u8 lutindex = MathUtil::Clamp(floorf(sample_loc * 256.f), 0.0f, 255.0f); + float delta = sample_loc * 256 - lutindex; + dist_atten = LookupLightingLut(lut, lutindex, delta / 256.f); } float clamp_highlights = 1.0f; @@ -195,7 +192,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu } auto GetLutIndex = [&](unsigned num, LightingRegs::LightingLutInput input, - bool abs) -> float { + bool abs) -> std::tuple { Math::Vec3 norm_view = view.Normalized(); Math::Vec3 half_angle = (norm_view + light_vector).Normalized(); @@ -229,14 +226,15 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu result = std::abs(result); else result = std::max(result, 0.0f); + + u8 lutindex = MathUtil::Clamp(floorf(result * 256.f), 0.0f, 255.0f); + float delta = result * 256 - lutindex; + return { lutindex, delta / 256.f }; } else { - if (result < 0.f) - result += 2.f; - - result /= 2.f; + u8 tmpi = MathUtil::Clamp(floorf(result * 128.f), 0.0f, 127.0f); + float delta = result * 128.f - tmpi; + return { tmpi & 0xFF, delta / 128.f }; } - - return MathUtil::Clamp(result, 0.0f, 1.0f); }; // Specular 0 component @@ -246,11 +244,13 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu lighting.config0.config, LightingRegs::LightingSampler::Distribution0)) { // Lookup specular "distribution 0" LUT value - float index = GetLutIndex(num, lighting.lut_input.d0.Value(), lighting.abs_lut_input.disable_d0 == 0); + u8 index; + float delta; + std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.d0.Value(), lighting.abs_lut_input.disable_d0 == 0); float scale = lighting.lut_scale.GetScale(lighting.lut_scale.d0); - d0_lut_value = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::Distribution0), index); + d0_lut_value = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::Distribution0), index, delta); } Math::Vec3 specular_0 = d0_lut_value * light_config.specular_0.ToVec3f(); @@ -260,11 +260,13 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu LightingRegs::IsLightingSamplerSupported(lighting.config0.config, LightingRegs::LightingSampler::ReflectRed)) { - float index = GetLutIndex(num, lighting.lut_input.rr, lighting.abs_lut_input.disable_rr == 0); + u8 index; + float delta; + std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.rr, lighting.abs_lut_input.disable_rr == 0); float scale = lighting.lut_scale.GetScale(lighting.lut_scale.rr); - refl_value.x = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectRed), index); + refl_value.x = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectRed), index, delta); } else { refl_value.x = 1.0f; } @@ -274,11 +276,13 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu LightingRegs::IsLightingSamplerSupported(lighting.config0.config, LightingRegs::LightingSampler::ReflectGreen)) { - float index = GetLutIndex(num, lighting.lut_input.rg, lighting.abs_lut_input.disable_rg == 0); + u8 index; + float delta; + std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.rg, lighting.abs_lut_input.disable_rg == 0); float scale = lighting.lut_scale.GetScale(lighting.lut_scale.rg); - refl_value.y = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectGreen), index); + refl_value.y = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectGreen), index, delta); } else { refl_value.y = refl_value.x; } @@ -288,11 +292,13 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu LightingRegs::IsLightingSamplerSupported(lighting.config0.config, LightingRegs::LightingSampler::ReflectBlue)) { - float index = GetLutIndex(num, lighting.lut_input.rb, lighting.abs_lut_input.disable_rb == 0); + u8 index; + float delta; + std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.rb, lighting.abs_lut_input.disable_rb == 0); float scale = lighting.lut_scale.GetScale(lighting.lut_scale.rb); - refl_value.z = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectBlue), index); + refl_value.z = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectBlue), index, delta); } else { refl_value.z = refl_value.x; } @@ -303,11 +309,13 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu lighting.config0.config, LightingRegs::LightingSampler::Distribution1)) { // Lookup specular "distribution 1" LUT value - float index = GetLutIndex(num, lighting.lut_input.d1.Value(), lighting.abs_lut_input.disable_d1 == 0); + u8 index; + float delta; + std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.d1.Value(), lighting.abs_lut_input.disable_d1 == 0); float scale = lighting.lut_scale.GetScale(lighting.lut_scale.d1); - d1_lut_value = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::Distribution1), index); + d1_lut_value = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::Distribution1), index, delta); } Math::Vec3 specular_1 = d1_lut_value * refl_value * light_config.specular_1.ToVec3f(); @@ -317,11 +325,13 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu lighting.config0.config, LightingRegs::LightingSampler::Fresnel)) { // Lookup fresnel LUT value - float index = GetLutIndex(num, lighting.lut_input.fr.Value(), lighting.abs_lut_input.disable_fr == 0); + u8 index; + float delta; + std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.fr.Value(), lighting.abs_lut_input.disable_fr == 0); float scale = lighting.lut_scale.GetScale(lighting.lut_scale.fr); - float lut_value = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::Fresnel), index); + float lut_value = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::Fresnel), index, delta); // Enabled for difffuse lighting alpha component if (lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::PrimaryAlpha || From 2a75837bc30ba08e2470f4b91078747a08c5213a Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 9 Jun 2017 18:18:57 -0500 Subject: [PATCH 007/195] SwRasterizer: Corrected the light LUT lookups. --- src/video_core/swrasterizer/rasterizer.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index a9098e1f09..2c804b6e7f 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -177,9 +177,9 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu float sample_loc = scale * distance + bias; - u8 lutindex = MathUtil::Clamp(floorf(sample_loc * 256.f), 0.0f, 255.0f); + u8 lutindex = MathUtil::Clamp(std::floor(sample_loc * 256.f), 0.0f, 255.0f); float delta = sample_loc * 256 - lutindex; - dist_atten = LookupLightingLut(lut, lutindex, delta / 256.f); + dist_atten = LookupLightingLut(lut, lutindex, delta); } float clamp_highlights = 1.0f; @@ -227,13 +227,14 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu else result = std::max(result, 0.0f); - u8 lutindex = MathUtil::Clamp(floorf(result * 256.f), 0.0f, 255.0f); + u8 lutindex = MathUtil::Clamp(std::floor(result * 256.f), 0.0f, 255.0f); float delta = result * 256 - lutindex; - return { lutindex, delta / 256.f }; + return { lutindex, delta }; } else { - u8 tmpi = MathUtil::Clamp(floorf(result * 128.f), 0.0f, 127.0f); + float flr = std::floor(result * 128.f); + s8 tmpi = MathUtil::Clamp(flr, -128.0f, 127.0f); float delta = result * 128.f - tmpi; - return { tmpi & 0xFF, delta / 128.f }; + return { tmpi & 0xFF, delta }; } }; From 73566ff7a990cdfe8d8f023997b57942dc785fc4 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 11 Jun 2017 11:55:35 -0500 Subject: [PATCH 008/195] SwRasterizer: Flip the vertex quaternions before clipping (if necessary). --- src/common/vector_math.h | 2 +- src/video_core/swrasterizer/clipper.cpp | 11 ++++++++++ src/video_core/swrasterizer/rasterizer.cpp | 24 ++++------------------ 3 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/common/vector_math.h b/src/common/vector_math.h index c7a461a1ef..d0fe0e4057 100644 --- a/src/common/vector_math.h +++ b/src/common/vector_math.h @@ -462,7 +462,7 @@ public: z -= other.z; w -= other.w; } - template ::value>::type> + template Vec4 operator-() const { return MakeVec(-x, -y, -z, -w); } diff --git a/src/video_core/swrasterizer/clipper.cpp b/src/video_core/swrasterizer/clipper.cpp index 6fb9237564..7537689b7f 100644 --- a/src/video_core/swrasterizer/clipper.cpp +++ b/src/video_core/swrasterizer/clipper.cpp @@ -95,6 +95,17 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu static const size_t MAX_VERTICES = 9; static_vector buffer_a = {v0, v1, v2}; static_vector buffer_b; + + auto FlipQuaternionIfOpposite = [](auto& a, const auto& b) { + if (Math::Dot(a, b) < float24::Zero()) + a = -a; + }; + + // Flip the quaternions if they are opposite to prevent interpolating them over the wrong + // direction. + FlipQuaternionIfOpposite(buffer_a[1].quat, buffer_a[0].quat); + FlipQuaternionIfOpposite(buffer_a[2].quat, buffer_a[0].quat); + auto* output_list = &buffer_a; auto* input_list = &buffer_b; diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 2c804b6e7f..76f793c86a 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -362,13 +362,6 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu }; } -static bool AreQuaternionsOpposite(Math::Vec4 qa, Math::Vec4 qb) { - Math::Vec4f a{ qa.x.ToFloat32(), qa.y.ToFloat32(), qa.z.ToFloat32(), qa.w.ToFloat32() }; - Math::Vec4f b{ qb.x.ToFloat32(), qb.y.ToFloat32(), qb.z.ToFloat32(), qb.w.ToFloat32() }; - - return (Math::Dot(a, b) < 0.f); -} - MICROPROFILE_DEFINE(GPU_Rasterization, "GPU", "Rasterization", MP_RGB(50, 50, 240)); /** @@ -462,15 +455,6 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve int bias2 = IsRightSideOrFlatBottomEdge(vtxpos[2].xy(), vtxpos[0].xy(), vtxpos[1].xy()) ? -1 : 0; - // Flip the quaternions if they are opposite to prevent interpolating them over the wrong direction. - auto v1_quat = v1.quat; - auto v2_quat = v2.quat; - - if (AreQuaternionsOpposite(v0.quat, v1.quat)) - v1_quat = v1_quat * float24::FromFloat32(-1.0f); - if (AreQuaternionsOpposite(v0.quat, v2.quat)) - v2_quat = v2_quat * float24::FromFloat32(-1.0f); - auto w_inverse = Math::MakeVec(v0.pos.w, v1.pos.w, v2.pos.w); auto textures = regs.texturing.GetTextures(); @@ -571,11 +555,11 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve Math::Quaternion normquat{ { - GetInterpolatedAttribute(v0.quat.x, v1_quat.x, v2_quat.x).ToFloat32(), - GetInterpolatedAttribute(v0.quat.y, v1_quat.y, v2_quat.y).ToFloat32(), - GetInterpolatedAttribute(v0.quat.z, v1_quat.z, v2_quat.z).ToFloat32() + GetInterpolatedAttribute(v0.quat.x, v1.quat.x, v2.quat.x).ToFloat32(), + GetInterpolatedAttribute(v0.quat.y, v1.quat.y, v2.quat.y).ToFloat32(), + GetInterpolatedAttribute(v0.quat.z, v1.quat.z, v2.quat.z).ToFloat32() }, - GetInterpolatedAttribute(v0.quat.w, v1_quat.w, v2_quat.w).ToFloat32(), + GetInterpolatedAttribute(v0.quat.w, v1.quat.w, v2.quat.w).ToFloat32(), }; Math::Vec3 fragment_position{ From 2d69a9b8bf232fdd9e3bbb2a9c624ee9dd6ec637 Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 13 Jun 2017 12:31:28 -0500 Subject: [PATCH 009/195] SwRasterizer: Run clang-format --- src/video_core/swrasterizer/rasterizer.cpp | 128 +++++++++++++-------- 1 file changed, 83 insertions(+), 45 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 76f793c86a..382b5927b9 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -125,11 +125,12 @@ float LookupLightingLut(size_t lut_index, u8 index, float delta) { return lut_value + lut_diff * delta; } -std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Quaternion& normquat, const Math::Vec3& view) { +std::tuple, Math::Vec4> ComputeFragmentsColors( + const Math::Quaternion& normquat, const Math::Vec3& view) { const auto& lighting = g_state.regs.lighting; if (lighting.disable) - return {{}, {}}; + return {Math::MakeVec(0, 0, 0, 0), Math::MakeVec(0, 0, 0, 0)}; // TODO(Subv): Bump mapping Math::Vec3 surface_normal = {0.0f, 0.0f, 1.0f}; @@ -151,7 +152,9 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu unsigned num = lighting.light_enable.GetNum(light_index); const auto& light_config = g_state.regs.lighting.light[num]; - Math::Vec3 position = {float16::FromRaw(light_config.x).ToFloat32(), float16::FromRaw(light_config.y).ToFloat32(), float16::FromRaw(light_config.z).ToFloat32()}; + Math::Vec3 position = {float16::FromRaw(light_config.x).ToFloat32(), + float16::FromRaw(light_config.y).ToFloat32(), + float16::FromRaw(light_config.z).ToFloat32()}; if (light_config.config.directional) light_vector = position; @@ -173,11 +176,13 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu auto distance = (-view - position).Length(); float scale = Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32(); float bias = Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32(); - size_t lut = static_cast(LightingRegs::LightingSampler::DistanceAttenuation) + num; + size_t lut = + static_cast(LightingRegs::LightingSampler::DistanceAttenuation) + num; float sample_loc = scale * distance + bias; - u8 lutindex = MathUtil::Clamp(std::floor(sample_loc * 256.f), 0.0f, 255.0f); + u8 lutindex = + static_cast(MathUtil::Clamp(std::floor(sample_loc * 256.f), 0.0f, 255.0f)); float delta = sample_loc * 256 - lutindex; dist_atten = LookupLightingLut(lut, lutindex, delta); } @@ -192,7 +197,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu } auto GetLutIndex = [&](unsigned num, LightingRegs::LightingLutInput input, - bool abs) -> std::tuple { + bool abs) -> std::tuple { Math::Vec3 norm_view = view.Normalized(); Math::Vec3 half_angle = (norm_view + light_vector).Normalized(); @@ -216,7 +221,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu break; default: - LOG_CRITICAL(HW_GPU, "Unknown lighting LUT input %d\n", (int)input); + LOG_CRITICAL(HW_GPU, "Unknown lighting LUT input %u\n", static_cast(input)); UNIMPLEMENTED(); result = 0.f; } @@ -227,14 +232,15 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu else result = std::max(result, 0.0f); - u8 lutindex = MathUtil::Clamp(std::floor(result * 256.f), 0.0f, 255.0f); + float flr = std::floor(result * 256.f); + u8 lutindex = static_cast(MathUtil::Clamp(flr, 0.0f, 255.0f)); float delta = result * 256 - lutindex; - return { lutindex, delta }; + return {lutindex, delta}; } else { float flr = std::floor(result * 128.f); - s8 tmpi = MathUtil::Clamp(flr, -128.0f, 127.0f); - float delta = result * 128.f - tmpi; - return { tmpi & 0xFF, delta }; + s8 lutindex = static_cast(MathUtil::Clamp(flr, -128.0f, 127.0f)); + float delta = result * 128.f - lutindex; + return {static_cast(lutindex), delta}; } }; @@ -247,11 +253,15 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu // Lookup specular "distribution 0" LUT value u8 index; float delta; - std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.d0.Value(), lighting.abs_lut_input.disable_d0 == 0); + std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.d0.Value(), + lighting.abs_lut_input.disable_d0 == 0); float scale = lighting.lut_scale.GetScale(lighting.lut_scale.d0); - d0_lut_value = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::Distribution0), index, delta); + d0_lut_value = + scale * + LookupLightingLut(static_cast(LightingRegs::LightingSampler::Distribution0), + index, delta); } Math::Vec3 specular_0 = d0_lut_value * light_config.specular_0.ToVec3f(); @@ -263,11 +273,15 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu u8 index; float delta; - std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.rr, lighting.abs_lut_input.disable_rr == 0); + std::tie(index, delta) = + GetLutIndex(num, lighting.lut_input.rr, lighting.abs_lut_input.disable_rr == 0); float scale = lighting.lut_scale.GetScale(lighting.lut_scale.rr); - refl_value.x = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectRed), index, delta); + refl_value.x = + scale * + LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectRed), + index, delta); } else { refl_value.x = 1.0f; } @@ -279,11 +293,15 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu u8 index; float delta; - std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.rg, lighting.abs_lut_input.disable_rg == 0); + std::tie(index, delta) = + GetLutIndex(num, lighting.lut_input.rg, lighting.abs_lut_input.disable_rg == 0); float scale = lighting.lut_scale.GetScale(lighting.lut_scale.rg); - refl_value.y = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectGreen), index, delta); + refl_value.y = + scale * + LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectGreen), + index, delta); } else { refl_value.y = refl_value.x; } @@ -295,11 +313,15 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu u8 index; float delta; - std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.rb, lighting.abs_lut_input.disable_rb == 0); + std::tie(index, delta) = + GetLutIndex(num, lighting.lut_input.rb, lighting.abs_lut_input.disable_rb == 0); float scale = lighting.lut_scale.GetScale(lighting.lut_scale.rb); - refl_value.z = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectBlue), index, delta); + refl_value.z = + scale * + LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectBlue), + index, delta); } else { refl_value.z = refl_value.x; } @@ -312,54 +334,72 @@ std::tuple, Math::Vec4> ComputeFragmentsColors(const Math::Qu // Lookup specular "distribution 1" LUT value u8 index; float delta; - std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.d1.Value(), lighting.abs_lut_input.disable_d1 == 0); + std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.d1.Value(), + lighting.abs_lut_input.disable_d1 == 0); float scale = lighting.lut_scale.GetScale(lighting.lut_scale.d1); - d1_lut_value = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::Distribution1), index, delta); + d1_lut_value = + scale * + LookupLightingLut(static_cast(LightingRegs::LightingSampler::Distribution1), + index, delta); } - Math::Vec3 specular_1 = d1_lut_value * refl_value * light_config.specular_1.ToVec3f(); + Math::Vec3 specular_1 = + d1_lut_value * refl_value * light_config.specular_1.ToVec3f(); if (lighting.config1.disable_lut_fr == 0 && - LightingRegs::IsLightingSamplerSupported( - lighting.config0.config, LightingRegs::LightingSampler::Fresnel)) { + LightingRegs::IsLightingSamplerSupported(lighting.config0.config, + LightingRegs::LightingSampler::Fresnel)) { // Lookup fresnel LUT value u8 index; float delta; - std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.fr.Value(), lighting.abs_lut_input.disable_fr == 0); + std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.fr.Value(), + lighting.abs_lut_input.disable_fr == 0); float scale = lighting.lut_scale.GetScale(lighting.lut_scale.fr); - float lut_value = scale * LookupLightingLut(static_cast(LightingRegs::LightingSampler::Fresnel), index, delta); + float lut_value = + scale * + LookupLightingLut(static_cast(LightingRegs::LightingSampler::Fresnel), + index, delta); - // Enabled for difffuse lighting alpha component - if (lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::PrimaryAlpha || + // Enabled for diffuse lighting alpha component + if (lighting.config0.fresnel_selector == + LightingRegs::LightingFresnelSelector::PrimaryAlpha || lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { diffuse_sum.a() *= lut_value; } // Enabled for the specular lighting alpha component if (lighting.config0.fresnel_selector == - LightingRegs::LightingFresnelSelector::SecondaryAlpha || + LightingRegs::LightingFresnelSelector::SecondaryAlpha || lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { specular_sum.a() *= lut_value; } } - - auto diffuse = light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); + auto diffuse = + light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); diffuse_sum += Math::MakeVec(diffuse * dist_atten, 0.0f); - specular_sum += Math::MakeVec((specular_0 + specular_1) * clamp_highlights * dist_atten, 0.f); + specular_sum += + Math::MakeVec((specular_0 + specular_1) * clamp_highlights * dist_atten, 0.f); } diffuse_sum += Math::MakeVec(lighting.global_ambient.ToVec3f(), 0.0f); - return { - Math::MakeVec(MathUtil::Clamp(diffuse_sum.x, 0.0f, 1.0f) * 255, MathUtil::Clamp(diffuse_sum.y, 0.0f, 1.0f) * 255, MathUtil::Clamp(diffuse_sum.z, 0.0f, 1.0f) * 255, MathUtil::Clamp(diffuse_sum.w, 0.0f, 1.0f) * 255).Cast(), - Math::MakeVec(MathUtil::Clamp(specular_sum.x, 0.0f, 1.0f) * 255, MathUtil::Clamp(specular_sum.y, 0.0f, 1.0f) * 255, MathUtil::Clamp(specular_sum.z, 0.0f, 1.0f) * 255, MathUtil::Clamp(specular_sum.w, 0.0f, 1.0f) * 255).Cast() - }; + + return {Math::MakeVec(MathUtil::Clamp(diffuse_sum.x, 0.0f, 1.0f) * 255, + MathUtil::Clamp(diffuse_sum.y, 0.0f, 1.0f) * 255, + MathUtil::Clamp(diffuse_sum.z, 0.0f, 1.0f) * 255, + MathUtil::Clamp(diffuse_sum.w, 0.0f, 1.0f) * 255) + .Cast(), + Math::MakeVec(MathUtil::Clamp(specular_sum.x, 0.0f, 1.0f) * 255, + MathUtil::Clamp(specular_sum.y, 0.0f, 1.0f) * 255, + MathUtil::Clamp(specular_sum.z, 0.0f, 1.0f) * 255, + MathUtil::Clamp(specular_sum.w, 0.0f, 1.0f) * 255) + .Cast()}; } MICROPROFILE_DEFINE(GPU_Rasterization, "GPU", "Rasterization", MP_RGB(50, 50, 240)); @@ -554,19 +594,16 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve }; Math::Quaternion normquat{ - { - GetInterpolatedAttribute(v0.quat.x, v1.quat.x, v2.quat.x).ToFloat32(), - GetInterpolatedAttribute(v0.quat.y, v1.quat.y, v2.quat.y).ToFloat32(), - GetInterpolatedAttribute(v0.quat.z, v1.quat.z, v2.quat.z).ToFloat32() - }, + {GetInterpolatedAttribute(v0.quat.x, v1.quat.x, v2.quat.x).ToFloat32(), + GetInterpolatedAttribute(v0.quat.y, v1.quat.y, v2.quat.y).ToFloat32(), + GetInterpolatedAttribute(v0.quat.z, v1.quat.z, v2.quat.z).ToFloat32()}, GetInterpolatedAttribute(v0.quat.w, v1.quat.w, v2.quat.w).ToFloat32(), }; Math::Vec3 fragment_position{ GetInterpolatedAttribute(v0.view.x, v1.view.x, v2.view.x).ToFloat32(), GetInterpolatedAttribute(v0.view.y, v1.view.y, v2.view.y).ToFloat32(), - GetInterpolatedAttribute(v0.view.z, v1.view.z, v2.view.z).ToFloat32() - }; + GetInterpolatedAttribute(v0.view.z, v1.view.z, v2.view.z).ToFloat32()}; Math::Vec2 uv[3]; uv[0].u() = GetInterpolatedAttribute(v0.tc0.u(), v1.tc0.u(), v2.tc0.u()); @@ -685,7 +722,8 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve Math::Vec4 primary_fragment_color; Math::Vec4 secondary_fragment_color; - std::tie(primary_fragment_color, secondary_fragment_color) = ComputeFragmentsColors(normquat, fragment_position); + std::tie(primary_fragment_color, secondary_fragment_color) = + ComputeFragmentsColors(normquat, fragment_position); for (unsigned tev_stage_index = 0; tev_stage_index < tev_stages.size(); ++tev_stage_index) { From 6250f52e939c714ccb302003502ee78941c8221b Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 13 Jun 2017 12:36:45 -0500 Subject: [PATCH 010/195] SwRasterizer: Fixed a few conversion warnings and moved per-light values into the per-light loop. --- src/video_core/swrasterizer/rasterizer.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 382b5927b9..54af53bbdf 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -143,18 +143,18 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( // Use the normalized the quaternion when performing the rotation auto normal = Math::QuaternionRotate(normquat.Normalized(), surface_normal); - Math::Vec3 light_vector = {}; Math::Vec4 diffuse_sum = {0.f, 0.f, 0.f, 1.f}; Math::Vec4 specular_sum = {0.f, 0.f, 0.f, 1.f}; - Math::Vec3 refl_value = {}; for (unsigned light_index = 0; light_index <= lighting.max_light_index; ++light_index) { unsigned num = lighting.light_enable.GetNum(light_index); const auto& light_config = g_state.regs.lighting.light[num]; + Math::Vec3 refl_value = {}; Math::Vec3 position = {float16::FromRaw(light_config.x).ToFloat32(), float16::FromRaw(light_config.y).ToFloat32(), float16::FromRaw(light_config.z).ToFloat32()}; + Math::Vec3 light_vector; if (light_config.config.directional) light_vector = position; @@ -175,11 +175,12 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( if (!lighting.IsDistAttenDisabled(num)) { auto distance = (-view - position).Length(); float scale = Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32(); - float bias = Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32(); + float dist_aten_bias = + Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32(); size_t lut = static_cast(LightingRegs::LightingSampler::DistanceAttenuation) + num; - float sample_loc = scale * distance + bias; + float sample_loc = scale * distance + dist_aten_bias; u8 lutindex = static_cast(MathUtil::Clamp(std::floor(sample_loc * 256.f), 0.0f, 255.0f)); @@ -238,7 +239,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( return {lutindex, delta}; } else { float flr = std::floor(result * 128.f); - s8 lutindex = static_cast(MathUtil::Clamp(flr, -128.0f, 127.0f)); + s8 lutindex = static_cast(MathUtil::Clamp(flr, -128.0f, 127.0f)); float delta = result * 128.f - lutindex; return {static_cast(lutindex), delta}; } From 37ac2b6657002e19d78cbc97841f8d3eee6ac5b8 Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 13 Jun 2017 12:53:50 -0500 Subject: [PATCH 011/195] SwRasterizer/Lighting: Fixed a bug where the distance attenuation bias was being set to the dist atten scale. --- src/video_core/swrasterizer/rasterizer.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 54af53bbdf..48ed8ccbf3 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -175,12 +175,11 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( if (!lighting.IsDistAttenDisabled(num)) { auto distance = (-view - position).Length(); float scale = Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32(); - float dist_aten_bias = - Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32(); + float bias = Pica::float20::FromRaw(light_config.dist_atten_bias).ToFloat32(); size_t lut = static_cast(LightingRegs::LightingSampler::DistanceAttenuation) + num; - float sample_loc = scale * distance + dist_aten_bias; + float sample_loc = scale * distance + bias; u8 lutindex = static_cast(MathUtil::Clamp(std::floor(sample_loc * 256.f), 0.0f, 255.0f)); From 7bc467e8725c6751eb44ea45ff2203af8692cda1 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 28 Jun 2017 12:34:16 -0500 Subject: [PATCH 012/195] SwRasterizer/Lighting: Do not use global state in LookupLightingLut. --- src/video_core/pica_state.h | 2 +- src/video_core/swrasterizer/rasterizer.cpp | 33 ++++++++++++++-------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/video_core/pica_state.h b/src/video_core/pica_state.h index 2d23d34e68..864a2c9e60 100644 --- a/src/video_core/pica_state.h +++ b/src/video_core/pica_state.h @@ -79,7 +79,7 @@ struct State { std::array color_diff_table; } proctex; - struct { + struct Lighting { union LutEntry { // Used for raw access u32 raw; diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 48ed8ccbf3..b69f7b692a 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -115,12 +115,15 @@ static std::tuple ConvertCubeCoord(float24 u, float24 v return std::make_tuple(x / z * half + half, y / z * half + half, addr); } -float LookupLightingLut(size_t lut_index, u8 index, float delta) { - ASSERT_MSG(lut_index < g_state.lighting.luts.size(), "Out of range lut"); - ASSERT_MSG(index < g_state.lighting.luts[0].size(), "Out of range index"); +static float LookupLightingLut(const Pica::State::Lighting& lighting, size_t lut_index, u8 index, + float delta) { + ASSERT_MSG(lut_index < lighting.luts.size(), "Out of range lut"); + ASSERT_MSG(index < lighting.luts[0].size(), "Out of range index"); - float lut_value = g_state.lighting.luts[lut_index][index].ToFloat(); - float lut_diff = g_state.lighting.luts[lut_index][index].DiffToFloat(); + const auto& lut = lighting.luts[lut_index][index]; + + float lut_value = lut.ToFloat(); + float lut_diff = lut.DiffToFloat(); return lut_value + lut_diff * delta; } @@ -184,7 +187,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( u8 lutindex = static_cast(MathUtil::Clamp(std::floor(sample_loc * 256.f), 0.0f, 255.0f)); float delta = sample_loc * 256 - lutindex; - dist_atten = LookupLightingLut(lut, lutindex, delta); + dist_atten = LookupLightingLut(g_state.lighting, lut, lutindex, delta); } float clamp_highlights = 1.0f; @@ -260,7 +263,8 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( d0_lut_value = scale * - LookupLightingLut(static_cast(LightingRegs::LightingSampler::Distribution0), + LookupLightingLut(g_state.lighting, + static_cast(LightingRegs::LightingSampler::Distribution0), index, delta); } @@ -280,7 +284,8 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( refl_value.x = scale * - LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectRed), + LookupLightingLut(g_state.lighting, + static_cast(LightingRegs::LightingSampler::ReflectRed), index, delta); } else { refl_value.x = 1.0f; @@ -300,7 +305,8 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( refl_value.y = scale * - LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectGreen), + LookupLightingLut(g_state.lighting, + static_cast(LightingRegs::LightingSampler::ReflectGreen), index, delta); } else { refl_value.y = refl_value.x; @@ -320,7 +326,8 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( refl_value.z = scale * - LookupLightingLut(static_cast(LightingRegs::LightingSampler::ReflectBlue), + LookupLightingLut(g_state.lighting, + static_cast(LightingRegs::LightingSampler::ReflectBlue), index, delta); } else { refl_value.z = refl_value.x; @@ -341,7 +348,8 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( d1_lut_value = scale * - LookupLightingLut(static_cast(LightingRegs::LightingSampler::Distribution1), + LookupLightingLut(g_state.lighting, + static_cast(LightingRegs::LightingSampler::Distribution1), index, delta); } @@ -362,7 +370,8 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( float lut_value = scale * - LookupLightingLut(static_cast(LightingRegs::LightingSampler::Fresnel), + LookupLightingLut(g_state.lighting, + static_cast(LightingRegs::LightingSampler::Fresnel), index, delta); // Enabled for diffuse lighting alpha component From b8229a768434ab9b47123359669761c05ecdd6b0 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 28 Jun 2017 12:35:35 -0500 Subject: [PATCH 013/195] SwRasterizer/Lighting: Do not use global registers state in ComputeFragmentsColors. --- src/video_core/swrasterizer/rasterizer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index b69f7b692a..d2d77e8b06 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -129,8 +129,8 @@ static float LookupLightingLut(const Pica::State::Lighting& lighting, size_t lut } std::tuple, Math::Vec4> ComputeFragmentsColors( - const Math::Quaternion& normquat, const Math::Vec3& view) { - const auto& lighting = g_state.regs.lighting; + const Pica::LightingRegs& lighting, const Math::Quaternion& normquat, + const Math::Vec3& view) { if (lighting.disable) return {Math::MakeVec(0, 0, 0, 0), Math::MakeVec(0, 0, 0, 0)}; @@ -732,7 +732,7 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve Math::Vec4 secondary_fragment_color; std::tie(primary_fragment_color, secondary_fragment_color) = - ComputeFragmentsColors(normquat, fragment_position); + ComputeFragmentsColors(g_state.regs.lighting, normquat, fragment_position); for (unsigned tev_stage_index = 0; tev_stage_index < tev_stages.size(); ++tev_stage_index) { From 7526af5e52ac1e24512faa1cd8f1a169407689fb Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 28 Jun 2017 12:37:14 -0500 Subject: [PATCH 014/195] SwRasterizer/Lighting: Move the lighting enable check outside the ComputeFragmentsColors function. --- src/video_core/swrasterizer/rasterizer.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index d2d77e8b06..b2d2b6ef21 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -132,9 +132,6 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( const Pica::LightingRegs& lighting, const Math::Quaternion& normquat, const Math::Vec3& view) { - if (lighting.disable) - return {Math::MakeVec(0, 0, 0, 0), Math::MakeVec(0, 0, 0, 0)}; - // TODO(Subv): Bump mapping Math::Vec3 surface_normal = {0.0f, 0.0f, 1.0f}; @@ -728,11 +725,13 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve regs.texturing.tev_combiner_buffer_color.a, }; - Math::Vec4 primary_fragment_color; - Math::Vec4 secondary_fragment_color; + Math::Vec4 primary_fragment_color = {0, 0, 0, 0}; + Math::Vec4 secondary_fragment_color = {0, 0, 0, 0}; - std::tie(primary_fragment_color, secondary_fragment_color) = - ComputeFragmentsColors(g_state.regs.lighting, normquat, fragment_position); + if (!g_state.regs.lighting.disable) { + std::tie(primary_fragment_color, secondary_fragment_color) = + ComputeFragmentsColors(g_state.regs.lighting, normquat, fragment_position); + } for (unsigned tev_stage_index = 0; tev_stage_index < tev_stages.size(); ++tev_stage_index) { From 9906feefbd37ebfd658fecc47e960f23adc6b190 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 28 Jun 2017 12:43:00 -0500 Subject: [PATCH 015/195] SwRasterizer/Lighting: Move the clamp highlight calculation to the end of the per-light loop body. --- src/video_core/swrasterizer/rasterizer.cpp | 34 +++++++++++----------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index b2d2b6ef21..2c7a1a8156 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -163,14 +163,6 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( light_vector.Normalize(); - auto LV_N = Math::Dot(light_vector, normal); - auto dot_product = LV_N; - - if (light_config.config.two_sided_diffuse) - dot_product = std::abs(dot_product); - else - dot_product = std::max(dot_product, 0.0f); - float dist_atten = 1.0f; if (!lighting.IsDistAttenDisabled(num)) { auto distance = (-view - position).Length(); @@ -187,15 +179,6 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( dist_atten = LookupLightingLut(g_state.lighting, lut, lutindex, delta); } - float clamp_highlights = 1.0f; - - if (lighting.config0.clamp_highlights) { - if (LV_N <= 0.f) - clamp_highlights = 0.f; - else - clamp_highlights = 1.f; - } - auto GetLutIndex = [&](unsigned num, LightingRegs::LightingLutInput input, bool abs) -> std::tuple { @@ -386,6 +369,23 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( } } + auto dot_product = Math::Dot(light_vector, normal); + + // Calculate clamp highlights before applying the two-sided diffuse configuration to the dot + // product. + float clamp_highlights = 1.0f; + if (lighting.config0.clamp_highlights) { + if (dot_product <= 0.f) + clamp_highlights = 0.f; + else + clamp_highlights = 1.f; + } + + if (light_config.config.two_sided_diffuse) + dot_product = std::abs(dot_product); + else + dot_product = std::max(dot_product, 0.0f); + auto diffuse = light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); diffuse_sum += Math::MakeVec(diffuse * dist_atten, 0.0f); From f3660ba9dd13f342c591aaa9901e94b6caee8d9a Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 11 Jul 2017 19:51:29 +0300 Subject: [PATCH 016/195] vector_math: remove broken SFINAE stuff this was originally added to eliminate warnings on MSVC, but it doesn't work for custom types. --- src/common/vector_math.h | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/common/vector_math.h b/src/common/vector_math.h index d0fe0e4057..49ae87f6d1 100644 --- a/src/common/vector_math.h +++ b/src/common/vector_math.h @@ -31,7 +31,6 @@ #pragma once #include -#include namespace Math { @@ -90,7 +89,7 @@ public: x -= other.x; y -= other.y; } - template ::value>::type> + Vec2 operator-() const { return MakeVec(-x, -y); } @@ -247,7 +246,7 @@ public: y -= other.y; z -= other.z; } - template ::value>::type> + Vec3 operator-() const { return MakeVec(-x, -y, -z); } From efc655aec00d43d53c41b55d9a94d17ce81e5942 Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 11 Jul 2017 20:06:26 +0300 Subject: [PATCH 017/195] SwRasterizer/Lighting: pass lighting state as parameter --- src/video_core/swrasterizer/rasterizer.cpp | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 2c7a1a8156..b108a0f869 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -116,7 +116,7 @@ static std::tuple ConvertCubeCoord(float24 u, float24 v } static float LookupLightingLut(const Pica::State::Lighting& lighting, size_t lut_index, u8 index, - float delta) { + float delta) { ASSERT_MSG(lut_index < lighting.luts.size(), "Out of range lut"); ASSERT_MSG(index < lighting.luts[0].size(), "Out of range index"); @@ -129,8 +129,8 @@ static float LookupLightingLut(const Pica::State::Lighting& lighting, size_t lut } std::tuple, Math::Vec4> ComputeFragmentsColors( - const Pica::LightingRegs& lighting, const Math::Quaternion& normquat, - const Math::Vec3& view) { + const Pica::LightingRegs& lighting, const Pica::State::Lighting& lighting_state, + const Math::Quaternion& normquat, const Math::Vec3& view) { // TODO(Subv): Bump mapping Math::Vec3 surface_normal = {0.0f, 0.0f, 1.0f}; @@ -148,7 +148,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( for (unsigned light_index = 0; light_index <= lighting.max_light_index; ++light_index) { unsigned num = lighting.light_enable.GetNum(light_index); - const auto& light_config = g_state.regs.lighting.light[num]; + const auto& light_config = lighting.light[num]; Math::Vec3 refl_value = {}; Math::Vec3 position = {float16::FromRaw(light_config.x).ToFloat32(), @@ -176,7 +176,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( u8 lutindex = static_cast(MathUtil::Clamp(std::floor(sample_loc * 256.f), 0.0f, 255.0f)); float delta = sample_loc * 256 - lutindex; - dist_atten = LookupLightingLut(g_state.lighting, lut, lutindex, delta); + dist_atten = LookupLightingLut(lighting_state, lut, lutindex, delta); } auto GetLutIndex = [&](unsigned num, LightingRegs::LightingLutInput input, @@ -243,7 +243,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( d0_lut_value = scale * - LookupLightingLut(g_state.lighting, + LookupLightingLut(lighting_state, static_cast(LightingRegs::LightingSampler::Distribution0), index, delta); } @@ -264,7 +264,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( refl_value.x = scale * - LookupLightingLut(g_state.lighting, + LookupLightingLut(lighting_state, static_cast(LightingRegs::LightingSampler::ReflectRed), index, delta); } else { @@ -285,7 +285,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( refl_value.y = scale * - LookupLightingLut(g_state.lighting, + LookupLightingLut(lighting_state, static_cast(LightingRegs::LightingSampler::ReflectGreen), index, delta); } else { @@ -306,7 +306,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( refl_value.z = scale * - LookupLightingLut(g_state.lighting, + LookupLightingLut(lighting_state, static_cast(LightingRegs::LightingSampler::ReflectBlue), index, delta); } else { @@ -328,7 +328,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( d1_lut_value = scale * - LookupLightingLut(g_state.lighting, + LookupLightingLut(lighting_state, static_cast(LightingRegs::LightingSampler::Distribution1), index, delta); } @@ -350,7 +350,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( float lut_value = scale * - LookupLightingLut(g_state.lighting, + LookupLightingLut(lighting_state, static_cast(LightingRegs::LightingSampler::Fresnel), index, delta); @@ -729,8 +729,8 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve Math::Vec4 secondary_fragment_color = {0, 0, 0, 0}; if (!g_state.regs.lighting.disable) { - std::tie(primary_fragment_color, secondary_fragment_color) = - ComputeFragmentsColors(g_state.regs.lighting, normquat, fragment_position); + std::tie(primary_fragment_color, secondary_fragment_color) = ComputeFragmentsColors( + g_state.regs.lighting, g_state.lighting, normquat, fragment_position); } for (unsigned tev_stage_index = 0; tev_stage_index < tev_stages.size(); From fe44e843fe1e300491d3bcd9072948407a86e7e1 Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 11 Jul 2017 20:08:56 +0300 Subject: [PATCH 018/195] vector_math: remove dead template parameter --- src/common/vector_math.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/common/vector_math.h b/src/common/vector_math.h index 49ae87f6d1..6e2a5ad601 100644 --- a/src/common/vector_math.h +++ b/src/common/vector_math.h @@ -461,7 +461,7 @@ public: z -= other.z; w -= other.w; } - template + Vec4 operator-() const { return MakeVec(-x, -y, -z, -w); } From f13cf506e0b0e42e6c9b00b163aaabc3b63fb7ea Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 11 Jul 2017 20:15:23 +0300 Subject: [PATCH 019/195] SwRasterizer: only interpolate quat and view when lighting is enabled --- src/video_core/swrasterizer/rasterizer.cpp | 28 +++++++++++----------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index b108a0f869..5844c401c9 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -599,18 +599,6 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve 255), }; - Math::Quaternion normquat{ - {GetInterpolatedAttribute(v0.quat.x, v1.quat.x, v2.quat.x).ToFloat32(), - GetInterpolatedAttribute(v0.quat.y, v1.quat.y, v2.quat.y).ToFloat32(), - GetInterpolatedAttribute(v0.quat.z, v1.quat.z, v2.quat.z).ToFloat32()}, - GetInterpolatedAttribute(v0.quat.w, v1.quat.w, v2.quat.w).ToFloat32(), - }; - - Math::Vec3 fragment_position{ - GetInterpolatedAttribute(v0.view.x, v1.view.x, v2.view.x).ToFloat32(), - GetInterpolatedAttribute(v0.view.y, v1.view.y, v2.view.y).ToFloat32(), - GetInterpolatedAttribute(v0.view.z, v1.view.z, v2.view.z).ToFloat32()}; - Math::Vec2 uv[3]; uv[0].u() = GetInterpolatedAttribute(v0.tc0.u(), v1.tc0.u(), v2.tc0.u()); uv[0].v() = GetInterpolatedAttribute(v0.tc0.v(), v1.tc0.v(), v2.tc0.v()); @@ -729,8 +717,20 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve Math::Vec4 secondary_fragment_color = {0, 0, 0, 0}; if (!g_state.regs.lighting.disable) { - std::tie(primary_fragment_color, secondary_fragment_color) = ComputeFragmentsColors( - g_state.regs.lighting, g_state.lighting, normquat, fragment_position); + Math::Quaternion normquat{ + {GetInterpolatedAttribute(v0.quat.x, v1.quat.x, v2.quat.x).ToFloat32(), + GetInterpolatedAttribute(v0.quat.y, v1.quat.y, v2.quat.y).ToFloat32(), + GetInterpolatedAttribute(v0.quat.z, v1.quat.z, v2.quat.z).ToFloat32()}, + GetInterpolatedAttribute(v0.quat.w, v1.quat.w, v2.quat.w).ToFloat32(), + }; + + Math::Vec3 view{ + GetInterpolatedAttribute(v0.view.x, v1.view.x, v2.view.x).ToFloat32(), + GetInterpolatedAttribute(v0.view.y, v1.view.y, v2.view.y).ToFloat32(), + GetInterpolatedAttribute(v0.view.z, v1.view.z, v2.view.z).ToFloat32(), + }; + std::tie(primary_fragment_color, secondary_fragment_color) = + ComputeFragmentsColors(g_state.regs.lighting, g_state.lighting, normquat, view); } for (unsigned tev_stage_index = 0; tev_stage_index < tev_stages.size(); From c6d1472513394cc55b5d5a852d5f76b5e9a51f2b Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 11 Jul 2017 21:36:19 +0300 Subject: [PATCH 020/195] SwRasterizer/Lighting: refactor GetLutValue into a function. merging similar pattern. Also makes the code more similar to the gl one --- src/video_core/swrasterizer/rasterizer.cpp | 110 +++++---------------- 1 file changed, 27 insertions(+), 83 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 5844c401c9..53c3bb585d 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -179,9 +179,9 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( dist_atten = LookupLightingLut(lighting_state, lut, lutindex, delta); } - auto GetLutIndex = [&](unsigned num, LightingRegs::LightingLutInput input, - bool abs) -> std::tuple { - + auto GetLutValue = [&](LightingRegs::LightingLutInput input, bool abs, + LightingRegs::LightingScale scale_enum, + LightingRegs::LightingSampler sampler) { Math::Vec3 norm_view = view.Normalized(); Math::Vec3 half_angle = (norm_view + light_vector).Normalized(); float result = 0.0f; @@ -209,6 +209,9 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( result = 0.f; } + u8 index; + float delta; + if (abs) { if (light_config.config.two_sided_diffuse) result = std::abs(result); @@ -216,15 +219,18 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( result = std::max(result, 0.0f); float flr = std::floor(result * 256.f); - u8 lutindex = static_cast(MathUtil::Clamp(flr, 0.0f, 255.0f)); - float delta = result * 256 - lutindex; - return {lutindex, delta}; + index = static_cast(MathUtil::Clamp(flr, 0.0f, 255.0f)); + delta = result * 256 - index; } else { float flr = std::floor(result * 128.f); - s8 lutindex = static_cast(MathUtil::Clamp(flr, -128.0f, 127.0f)); - float delta = result * 128.f - lutindex; - return {static_cast(lutindex), delta}; + s8 signed_index = static_cast(MathUtil::Clamp(flr, -128.0f, 127.0f)); + delta = result * 128.f - signed_index; + index = static_cast(signed_index); } + + float scale = lighting.lut_scale.GetScale(scale_enum); + return scale * + LookupLightingLut(lighting_state, static_cast(sampler), index, delta); }; // Specular 0 component @@ -232,20 +238,9 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( if (lighting.config1.disable_lut_d0 == 0 && LightingRegs::IsLightingSamplerSupported( lighting.config0.config, LightingRegs::LightingSampler::Distribution0)) { - - // Lookup specular "distribution 0" LUT value - u8 index; - float delta; - std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.d0.Value(), - lighting.abs_lut_input.disable_d0 == 0); - - float scale = lighting.lut_scale.GetScale(lighting.lut_scale.d0); - d0_lut_value = - scale * - LookupLightingLut(lighting_state, - static_cast(LightingRegs::LightingSampler::Distribution0), - index, delta); + GetLutValue(lighting.lut_input.d0, lighting.abs_lut_input.disable_d0 == 0, + lighting.lut_scale.d0, LightingRegs::LightingSampler::Distribution0); } Math::Vec3 specular_0 = d0_lut_value * light_config.specular_0.ToVec3f(); @@ -254,19 +249,9 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( if (lighting.config1.disable_lut_rr == 0 && LightingRegs::IsLightingSamplerSupported(lighting.config0.config, LightingRegs::LightingSampler::ReflectRed)) { - - u8 index; - float delta; - std::tie(index, delta) = - GetLutIndex(num, lighting.lut_input.rr, lighting.abs_lut_input.disable_rr == 0); - - float scale = lighting.lut_scale.GetScale(lighting.lut_scale.rr); - refl_value.x = - scale * - LookupLightingLut(lighting_state, - static_cast(LightingRegs::LightingSampler::ReflectRed), - index, delta); + GetLutValue(lighting.lut_input.rr, lighting.abs_lut_input.disable_rr == 0, + lighting.lut_scale.rr, LightingRegs::LightingSampler::ReflectRed); } else { refl_value.x = 1.0f; } @@ -275,19 +260,9 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( if (lighting.config1.disable_lut_rg == 0 && LightingRegs::IsLightingSamplerSupported(lighting.config0.config, LightingRegs::LightingSampler::ReflectGreen)) { - - u8 index; - float delta; - std::tie(index, delta) = - GetLutIndex(num, lighting.lut_input.rg, lighting.abs_lut_input.disable_rg == 0); - - float scale = lighting.lut_scale.GetScale(lighting.lut_scale.rg); - refl_value.y = - scale * - LookupLightingLut(lighting_state, - static_cast(LightingRegs::LightingSampler::ReflectGreen), - index, delta); + GetLutValue(lighting.lut_input.rg, lighting.abs_lut_input.disable_rg == 0, + lighting.lut_scale.rg, LightingRegs::LightingSampler::ReflectGreen); } else { refl_value.y = refl_value.x; } @@ -296,19 +271,9 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( if (lighting.config1.disable_lut_rb == 0 && LightingRegs::IsLightingSamplerSupported(lighting.config0.config, LightingRegs::LightingSampler::ReflectBlue)) { - - u8 index; - float delta; - std::tie(index, delta) = - GetLutIndex(num, lighting.lut_input.rb, lighting.abs_lut_input.disable_rb == 0); - - float scale = lighting.lut_scale.GetScale(lighting.lut_scale.rb); - refl_value.z = - scale * - LookupLightingLut(lighting_state, - static_cast(LightingRegs::LightingSampler::ReflectBlue), - index, delta); + GetLutValue(lighting.lut_input.rb, lighting.abs_lut_input.disable_rb == 0, + lighting.lut_scale.rb, LightingRegs::LightingSampler::ReflectBlue); } else { refl_value.z = refl_value.x; } @@ -317,20 +282,9 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( if (lighting.config1.disable_lut_d1 == 0 && LightingRegs::IsLightingSamplerSupported( lighting.config0.config, LightingRegs::LightingSampler::Distribution1)) { - - // Lookup specular "distribution 1" LUT value - u8 index; - float delta; - std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.d1.Value(), - lighting.abs_lut_input.disable_d1 == 0); - - float scale = lighting.lut_scale.GetScale(lighting.lut_scale.d1); - d1_lut_value = - scale * - LookupLightingLut(lighting_state, - static_cast(LightingRegs::LightingSampler::Distribution1), - index, delta); + GetLutValue(lighting.lut_input.d1, lighting.abs_lut_input.disable_d1 == 0, + lighting.lut_scale.d1, LightingRegs::LightingSampler::Distribution1); } Math::Vec3 specular_1 = @@ -340,19 +294,9 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( LightingRegs::IsLightingSamplerSupported(lighting.config0.config, LightingRegs::LightingSampler::Fresnel)) { - // Lookup fresnel LUT value - u8 index; - float delta; - std::tie(index, delta) = GetLutIndex(num, lighting.lut_input.fr.Value(), - lighting.abs_lut_input.disable_fr == 0); - - float scale = lighting.lut_scale.GetScale(lighting.lut_scale.fr); - float lut_value = - scale * - LookupLightingLut(lighting_state, - static_cast(LightingRegs::LightingSampler::Fresnel), - index, delta); + GetLutValue(lighting.lut_input.fr, lighting.abs_lut_input.disable_fr == 0, + lighting.lut_scale.fr, LightingRegs::LightingSampler::Fresnel); // Enabled for diffuse lighting alpha component if (lighting.config0.fresnel_selector == From e415558a4fc471bc3ac2d22dd8052aeb63769c6e Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 11 Jul 2017 21:47:55 +0300 Subject: [PATCH 021/195] SwRasterizer/Lighting: get rid of nested return --- src/video_core/swrasterizer/rasterizer.cpp | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 53c3bb585d..e46790f85c 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -340,16 +340,17 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( diffuse_sum += Math::MakeVec(lighting.global_ambient.ToVec3f(), 0.0f); - return {Math::MakeVec(MathUtil::Clamp(diffuse_sum.x, 0.0f, 1.0f) * 255, - MathUtil::Clamp(diffuse_sum.y, 0.0f, 1.0f) * 255, - MathUtil::Clamp(diffuse_sum.z, 0.0f, 1.0f) * 255, - MathUtil::Clamp(diffuse_sum.w, 0.0f, 1.0f) * 255) - .Cast(), - Math::MakeVec(MathUtil::Clamp(specular_sum.x, 0.0f, 1.0f) * 255, - MathUtil::Clamp(specular_sum.y, 0.0f, 1.0f) * 255, - MathUtil::Clamp(specular_sum.z, 0.0f, 1.0f) * 255, - MathUtil::Clamp(specular_sum.w, 0.0f, 1.0f) * 255) - .Cast()}; + auto diffuse = Math::MakeVec(MathUtil::Clamp(diffuse_sum.x, 0.0f, 1.0f) * 255, + MathUtil::Clamp(diffuse_sum.y, 0.0f, 1.0f) * 255, + MathUtil::Clamp(diffuse_sum.z, 0.0f, 1.0f) * 255, + MathUtil::Clamp(diffuse_sum.w, 0.0f, 1.0f) * 255) + .Cast(); + auto specular = Math::MakeVec(MathUtil::Clamp(specular_sum.x, 0.0f, 1.0f) * 255, + MathUtil::Clamp(specular_sum.y, 0.0f, 1.0f) * 255, + MathUtil::Clamp(specular_sum.z, 0.0f, 1.0f) * 255, + MathUtil::Clamp(specular_sum.w, 0.0f, 1.0f) * 255) + .Cast(); + return {diffuse, specular}; } MICROPROFILE_DEFINE(GPU_Rasterization, "GPU", "Rasterization", MP_RGB(50, 50, 240)); From 56e5425e593e29aecf255c441791f2e24512f418 Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 11 Jul 2017 22:07:19 +0300 Subject: [PATCH 022/195] SwRasterizer/Lighting: unify float suffix --- src/video_core/swrasterizer/rasterizer.cpp | 24 ++++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index e46790f85c..c836806294 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -143,8 +143,8 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( // Use the normalized the quaternion when performing the rotation auto normal = Math::QuaternionRotate(normquat.Normalized(), surface_normal); - Math::Vec4 diffuse_sum = {0.f, 0.f, 0.f, 1.f}; - Math::Vec4 specular_sum = {0.f, 0.f, 0.f, 1.f}; + Math::Vec4 diffuse_sum = {0.0f, 0.0f, 0.0f, 1.0f}; + Math::Vec4 specular_sum = {0.0f, 0.0f, 0.0f, 1.0f}; for (unsigned light_index = 0; light_index <= lighting.max_light_index; ++light_index) { unsigned num = lighting.light_enable.GetNum(light_index); @@ -174,7 +174,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( float sample_loc = scale * distance + bias; u8 lutindex = - static_cast(MathUtil::Clamp(std::floor(sample_loc * 256.f), 0.0f, 255.0f)); + static_cast(MathUtil::Clamp(std::floor(sample_loc * 256.0f), 0.0f, 255.0f)); float delta = sample_loc * 256 - lutindex; dist_atten = LookupLightingLut(lighting_state, lut, lutindex, delta); } @@ -206,7 +206,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( default: LOG_CRITICAL(HW_GPU, "Unknown lighting LUT input %u\n", static_cast(input)); UNIMPLEMENTED(); - result = 0.f; + result = 0.0f; } u8 index; @@ -218,13 +218,13 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( else result = std::max(result, 0.0f); - float flr = std::floor(result * 256.f); + float flr = std::floor(result * 256.0f); index = static_cast(MathUtil::Clamp(flr, 0.0f, 255.0f)); delta = result * 256 - index; } else { - float flr = std::floor(result * 128.f); + float flr = std::floor(result * 128.0f); s8 signed_index = static_cast(MathUtil::Clamp(flr, -128.0f, 127.0f)); - delta = result * 128.f - signed_index; + delta = result * 128.0f - signed_index; index = static_cast(signed_index); } @@ -278,6 +278,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( refl_value.z = refl_value.x; } + // Specular 1 component float d1_lut_value = 1.0f; if (lighting.config1.disable_lut_d1 == 0 && LightingRegs::IsLightingSamplerSupported( @@ -290,6 +291,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( Math::Vec3 specular_1 = d1_lut_value * refl_value * light_config.specular_1.ToVec3f(); + // Fresnel if (lighting.config1.disable_lut_fr == 0 && LightingRegs::IsLightingSamplerSupported(lighting.config0.config, LightingRegs::LightingSampler::Fresnel)) { @@ -319,10 +321,10 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( // product. float clamp_highlights = 1.0f; if (lighting.config0.clamp_highlights) { - if (dot_product <= 0.f) - clamp_highlights = 0.f; + if (dot_product <= 0.0f) + clamp_highlights = 0.0f; else - clamp_highlights = 1.f; + clamp_highlights = 1.0f; } if (light_config.config.two_sided_diffuse) @@ -335,7 +337,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( diffuse_sum += Math::MakeVec(diffuse * dist_atten, 0.0f); specular_sum += - Math::MakeVec((specular_0 + specular_1) * clamp_highlights * dist_atten, 0.f); + Math::MakeVec((specular_0 + specular_1) * clamp_highlights * dist_atten, 0.0f); } diffuse_sum += Math::MakeVec(lighting.global_ambient.ToVec3f(), 0.0f); From 4feff63ffaec4d62d5bdfc85968cc99298907767 Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 11 Jul 2017 22:19:00 +0300 Subject: [PATCH 023/195] SwRasterizer/Lighting: dist atten lut input need to be clamp --- src/video_core/swrasterizer/rasterizer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index c836806294..37d1313cf8 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -171,7 +171,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( size_t lut = static_cast(LightingRegs::LightingSampler::DistanceAttenuation) + num; - float sample_loc = scale * distance + bias; + float sample_loc = MathUtil::Clamp(scale * distance + bias, 0.0f, 1.0f); u8 lutindex = static_cast(MathUtil::Clamp(std::floor(sample_loc * 256.0f), 0.0f, 255.0f)); From 98cd5164c508e7cc5eedee1d6541948e341f32a9 Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 20 Jul 2017 22:47:53 +0300 Subject: [PATCH 024/195] debugger/shader: fix inverted uniform flow control --- src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp b/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp index e3f3194dba..f8584dce7f 100644 --- a/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp +++ b/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp @@ -255,7 +255,7 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con output << '('; if (instr.flow_control.op != instr.flow_control.JustY) { - if (instr.flow_control.refx) + if (!instr.flow_control.refx) output << '!'; output << "cc.x"; } @@ -267,7 +267,7 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con } if (instr.flow_control.op != instr.flow_control.JustX) { - if (instr.flow_control.refy) + if (!instr.flow_control.refy) output << '!'; output << "cc.y"; } From 8375fd2aba3d700bf8b5269820f3b7cb93c56c8c Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 20 Jul 2017 22:58:38 +0300 Subject: [PATCH 025/195] debugger/shader: fix address register for reverted arithmetic op --- .../graphics/graphics_vertex_shader.cpp | 29 ++++++------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp b/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp index f8584dce7f..f6bd6bf613 100644 --- a/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp +++ b/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp @@ -183,23 +183,13 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con print_input(output, src1, swizzle.negate_src1, SelectorToString(swizzle.src1_selector)); AlignToColumn(kInputOperandColumnWidth); - if (src_is_inverted) { - print_input(output, src2, swizzle.negate_src2, - SelectorToString(swizzle.src2_selector)); - } else { - print_input(output, src2, swizzle.negate_src2, - SelectorToString(swizzle.src2_selector), true, - instr.mad.AddressRegisterName()); - } + print_input(output, src2, swizzle.negate_src2, + SelectorToString(swizzle.src2_selector), true, + src_is_inverted ? "" : instr.mad.AddressRegisterName()); AlignToColumn(kInputOperandColumnWidth); - if (src_is_inverted) { - print_input(output, src3, swizzle.negate_src3, - SelectorToString(swizzle.src3_selector), true, - instr.mad.AddressRegisterName()); - } else { - print_input(output, src3, swizzle.negate_src3, - SelectorToString(swizzle.src3_selector)); - } + print_input(output, src3, swizzle.negate_src3, + SelectorToString(swizzle.src3_selector), true, + src_is_inverted ? instr.mad.AddressRegisterName() : ""); AlignToColumn(kInputOperandColumnWidth); break; } @@ -222,16 +212,15 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con SourceRegister src1 = instr.common.GetSrc1(src_is_inverted); print_input(output, src1, swizzle.negate_src1, swizzle.SelectorToString(false), true, - instr.common.AddressRegisterName()); + src_is_inverted ? "" : instr.common.AddressRegisterName()); AlignToColumn(kInputOperandColumnWidth); } - // TODO: In some cases, the Address Register is used as an index for SRC2 - // instead of SRC1 if (opcode_info.subtype & OpCode::Info::Src2) { SourceRegister src2 = instr.common.GetSrc2(src_is_inverted); print_input(output, src2, swizzle.negate_src2, - swizzle.SelectorToString(true)); + swizzle.SelectorToString(true), true, + src_is_inverted ? instr.common.AddressRegisterName() : ""); AlignToColumn(kInputOperandColumnWidth); } break; From b5609e15781010a08afbd20778d34b1a8567995d Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 20 Jul 2017 23:18:07 +0300 Subject: [PATCH 026/195] debugger/shader: print the invert flag for JMPU --- src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp b/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp index f6bd6bf613..1301a3fedc 100644 --- a/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp +++ b/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp @@ -263,6 +263,10 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con output << ") "; } else if (opcode_info.subtype & OpCode::Info::HasUniformIndex) { + if (opcode.EffectiveOpCode() == OpCode::Id::JMPU && + (instr.flow_control.num_instructions & 1) == 1) { + output << '!'; + } output << 'b' << instr.flow_control.bool_uniform_id << ' '; } From 49602139c8cca0bf20e9c6f95ff8243751401578 Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 20 Jul 2017 23:30:34 +0300 Subject: [PATCH 027/195] debugger/shader: display LOOP --- src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp b/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp index 1301a3fedc..7f4ec0c52e 100644 --- a/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp +++ b/src/citra_qt/debugger/graphics/graphics_vertex_shader.cpp @@ -236,7 +236,9 @@ QVariant GraphicsVertexShaderModel::data(const QModelIndex& index, int role) con switch (opcode.EffectiveOpCode()) { case OpCode::Id::LOOP: - output << "(unknown instruction format)"; + output << 'i' << instr.flow_control.int_uniform_id << " (end on 0x" + << std::setw(4) << std::right << std::setfill('0') << std::hex + << (4 * instr.flow_control.dest_offset) << ")"; break; default: From 5682608df76b614cadff6061cff35dcf100b944b Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 21 Jul 2017 13:01:21 -0500 Subject: [PATCH 028/195] Services/APT: Use boost::optional for the APT parameter structure. --- src/core/hle/service/apt/apt.cpp | 46 ++++++++++++++++++-------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index df4b5cc3f7..e4068926a3 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include #include "common/common_paths.h" #include "common/file_util.h" #include "common/logging/log.h" @@ -44,7 +45,7 @@ static u8 unknown_ns_state_field; static ScreencapPostPermission screen_capture_post_permission; /// Parameter data to be returned in the next call to Glance/ReceiveParameter -static MessageParameter next_parameter; +static boost::optional next_parameter; void SendParameter(const MessageParameter& parameter) { next_parameter = parameter; @@ -227,18 +228,20 @@ void ReceiveParameter(Service::Interface* self) { buffer_size, static_buff_size); IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); + rb.Push(RESULT_SUCCESS); // No error - rb.Push(next_parameter.sender_id); - rb.Push(next_parameter.signal); // Signal type - ASSERT_MSG(next_parameter.buffer.size() <= buffer_size, "Input static buffer is too small !"); - rb.Push(static_cast(next_parameter.buffer.size())); // Parameter buffer size + rb.Push(next_parameter->sender_id); + rb.Push(next_parameter->signal); // Signal type + ASSERT_MSG(next_parameter->buffer.size() <= buffer_size, "Input static buffer is too small !"); + rb.Push(static_cast(next_parameter->buffer.size())); // Parameter buffer size - rb.PushMoveHandles((next_parameter.object != nullptr) - ? Kernel::g_handle_table.Create(next_parameter.object).Unwrap() + rb.PushMoveHandles((next_parameter->object != nullptr) + ? Kernel::g_handle_table.Create(next_parameter->object).Unwrap() : 0); - rb.PushStaticBuffer(buffer, static_cast(next_parameter.buffer.size()), 0); - Memory::WriteBlock(buffer, next_parameter.buffer.data(), next_parameter.buffer.size()); + rb.PushStaticBuffer(buffer, static_cast(next_parameter->buffer.size()), 0); + + Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size()); LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); } @@ -258,17 +261,18 @@ void GlanceParameter(Service::Interface* self) { IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); rb.Push(RESULT_SUCCESS); // No error - rb.Push(next_parameter.sender_id); - rb.Push(next_parameter.signal); // Signal type - ASSERT_MSG(next_parameter.buffer.size() <= buffer_size, "Input static buffer is too small !"); - rb.Push(static_cast(next_parameter.buffer.size())); // Parameter buffer size + rb.Push(next_parameter->sender_id); + rb.Push(next_parameter->signal); // Signal type + ASSERT_MSG(next_parameter->buffer.size() <= buffer_size, "Input static buffer is too small !"); + rb.Push(static_cast(next_parameter->buffer.size())); // Parameter buffer size - rb.PushCopyHandles((next_parameter.object != nullptr) - ? Kernel::g_handle_table.Create(next_parameter.object).Unwrap() + rb.PushMoveHandles((next_parameter->object != nullptr) + ? Kernel::g_handle_table.Create(next_parameter->object).Unwrap() : 0); - rb.PushStaticBuffer(buffer, static_cast(next_parameter.buffer.size()), 0); - Memory::WriteBlock(buffer, next_parameter.buffer.data(), next_parameter.buffer.size()); + rb.PushStaticBuffer(buffer, static_cast(next_parameter->buffer.size()), 0); + + Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size()); LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); } @@ -800,8 +804,10 @@ void Init() { notification_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT_U:Notification"); parameter_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT_U:Start"); - next_parameter.signal = static_cast(SignalType::Wakeup); - next_parameter.destination_id = 0x300; + // Initialize the parameter to wake up the application. + next_parameter.emplace(); + next_parameter->signal = static_cast(SignalType::Wakeup); + next_parameter->destination_id = static_cast(AppletId::Application); } void Shutdown() { @@ -812,7 +818,7 @@ void Shutdown() { notification_event = nullptr; parameter_event = nullptr; - next_parameter.object = nullptr; + next_parameter = boost::none; HLE::Applets::Shutdown(); } From 2dc720c355dad55a607c1f993fc823cc198bed08 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 21 Jul 2017 13:02:40 -0500 Subject: [PATCH 029/195] Services/APT: Use the right error codes in ReceiveParameter and GlanceParameter when the parameter doesn't exist. --- src/core/hle/service/apt/apt.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index e4068926a3..b5748693f8 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -227,6 +227,20 @@ void ReceiveParameter(Service::Interface* self) { "buffer_size is bigger than the size in the buffer descriptor (0x%08X > 0x%08zX)", buffer_size, static_buff_size); + if (!next_parameter) { + IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); + rb.Push(ResultCode(ErrorDescription::NoData, ErrorModule::Applet, + ErrorSummary::InvalidState, ErrorLevel::Status)); + return; + } + + if (next_parameter->destination_id != app_id) { + IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); + rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::Applet, ErrorSummary::NotFound, + ErrorLevel::Status)); + return; + } + IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); rb.Push(RESULT_SUCCESS); // No error @@ -259,6 +273,20 @@ void GlanceParameter(Service::Interface* self) { "buffer_size is bigger than the size in the buffer descriptor (0x%08X > 0x%08zX)", buffer_size, static_buff_size); + if (!next_parameter) { + IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); + rb.Push(ResultCode(ErrorDescription::NoData, ErrorModule::Applet, + ErrorSummary::InvalidState, ErrorLevel::Status)); + return; + } + + if (next_parameter->destination_id != app_id) { + IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); + rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::Applet, ErrorSummary::NotFound, + ErrorLevel::Status)); + return; + } + IPC::RequestBuilder rb = rp.MakeBuilder(4, 4); rb.Push(RESULT_SUCCESS); // No error rb.Push(next_parameter->sender_id); From e403638d9b2cbd7f7dbacd14c3c4bf9863bf7b34 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 21 Jul 2017 13:03:28 -0500 Subject: [PATCH 030/195] Services/APT: Properly clear the apt parameter after a successful ReceiveParameter call. --- src/core/hle/service/apt/apt.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index b5748693f8..b6c013d43f 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -257,7 +257,9 @@ void ReceiveParameter(Service::Interface* self) { Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size()); - LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); + // Clear the parameter + next_parameter = boost::none; + LOG_DEBUG(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); } void GlanceParameter(Service::Interface* self) { @@ -302,7 +304,11 @@ void GlanceParameter(Service::Interface* self) { Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size()); - LOG_WARNING(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); + // Note: The NS module always clears the DSPSleep and DSPWakeup signals even in GlanceParameter. + if (next_parameter->signal == static_cast(SignalType::DspSleep) || + next_parameter->signal == static_cast(SignalType::DspWakeup)) + next_parameter = boost::none; + LOG_DEBUG(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); } void CancelParameter(Service::Interface* self) { From a9bc417f5948dc63f182d31e4ba271aa23efe84d Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 21 Jul 2017 13:09:45 -0500 Subject: [PATCH 031/195] Services/APT: Reset the APT parameter inside CancelParameter if the conditions are met. --- src/core/hle/service/apt/apt.cpp | 33 ++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index b6c013d43f..9cfb7f71e4 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -314,17 +314,34 @@ void GlanceParameter(Service::Interface* self) { void CancelParameter(Service::Interface* self) { IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0xF, 4, 0); // 0xF0100 - u32 check_sender = rp.Pop(); + bool check_sender = rp.Pop(); u32 sender_appid = rp.Pop(); - u32 check_receiver = rp.Pop(); + bool check_receiver = rp.Pop(); u32 receiver_appid = rp.Pop(); - IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); - rb.Push(RESULT_SUCCESS); // No error - rb.Push(true); // Set to Success - LOG_WARNING(Service_APT, "(STUBBED) called check_sender=0x%08X, sender_appid=0x%08X, " - "check_receiver=0x%08X, receiver_appid=0x%08X", - check_sender, sender_appid, check_receiver, receiver_appid); + bool cancellation_success = true; + + if (!next_parameter) { + cancellation_success = false; + } else { + if (check_sender && next_parameter->sender_id != sender_appid) + cancellation_success = false; + + if (check_receiver && next_parameter->destination_id != receiver_appid) + cancellation_success = false; + } + + if (cancellation_success) + next_parameter = boost::none; + + IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); + + rb.Push(RESULT_SUCCESS); // No error + rb.Push(cancellation_success); + + LOG_DEBUG(Service_APT, "called check_sender=%u, sender_appid=0x%08X, " + "check_receiver=%u, receiver_appid=0x%08X", + check_sender, sender_appid, check_receiver, receiver_appid); } void PrepareToStartApplication(Service::Interface* self) { From 68596a706860f37de876ca070f9de6e664df0d05 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 21 Jul 2017 13:19:55 -0500 Subject: [PATCH 032/195] Services/APT: Return the proper error code when calling SendParameter with an outstanding parameter already in memory. --- src/core/hle/service/apt/apt.cpp | 15 +++++++++++---- src/core/hle/service/apt/apt.h | 6 ++++++ 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 9cfb7f71e4..987fb0992f 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -192,6 +192,13 @@ void SendParameter(Service::Interface* self) { IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); + // A new parameter can not be sent if the previous one hasn't been consumed yet + if (next_parameter) { + rb.Push(ResultCode(ErrCodes::ParameterPresent, ErrorModule::Applet, + ErrorSummary::InvalidState, ErrorLevel::Status)); + return; + } + if (dest_applet == nullptr) { LOG_ERROR(Service_APT, "Unknown applet id=0x%08X", dst_app_id); rb.Push(-1); // TODO(Subv): Find the right error code @@ -208,10 +215,10 @@ void SendParameter(Service::Interface* self) { rb.Push(dest_applet->ReceiveParameter(param)); - LOG_WARNING(Service_APT, - "(STUBBED) called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X," - "buffer_size=0x%08X, handle=0x%08X, size=0x%08zX, in_param_buffer_ptr=0x%08X", - src_app_id, dst_app_id, signal_type, buffer_size, handle, size, buffer); + LOG_DEBUG(Service_APT, + "called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X," + "buffer_size=0x%08X, handle=0x%08X, size=0x%08zX, in_param_buffer_ptr=0x%08X", + src_app_id, dst_app_id, signal_type, buffer_size, handle, size, buffer); } void ReceiveParameter(Service::Interface* self) { diff --git a/src/core/hle/service/apt/apt.h b/src/core/hle/service/apt/apt.h index ee80926d21..1067548534 100644 --- a/src/core/hle/service/apt/apt.h +++ b/src/core/hle/service/apt/apt.h @@ -116,6 +116,12 @@ enum class ScreencapPostPermission : u32 { DisableScreenshotPostingToMiiverse = 3 }; +namespace ErrCodes { +enum { + ParameterPresent = 2, +}; +} + /// Send a parameter to the currently-running application, which will read it via ReceiveParameter void SendParameter(const MessageParameter& parameter); From e59ab7c1d695e3eb303c5dd37cd0fde814657f53 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 21 Jul 2017 15:03:06 -0500 Subject: [PATCH 033/195] Service/APT: Log Send/Cancel/Receive/GlanceParameter calls even if they return an error. --- src/core/hle/service/apt/apt.cpp | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 987fb0992f..aad23e900e 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -190,6 +190,11 @@ void SendParameter(Service::Interface* self) { std::shared_ptr dest_applet = HLE::Applets::Applet::Get(static_cast(dst_app_id)); + LOG_DEBUG(Service_APT, + "called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X," + "buffer_size=0x%08X, handle=0x%08X, size=0x%08zX, in_param_buffer_ptr=0x%08X", + src_app_id, dst_app_id, signal_type, buffer_size, handle, size, buffer); + IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); // A new parameter can not be sent if the previous one hasn't been consumed yet @@ -214,11 +219,6 @@ void SendParameter(Service::Interface* self) { Memory::ReadBlock(buffer, param.buffer.data(), param.buffer.size()); rb.Push(dest_applet->ReceiveParameter(param)); - - LOG_DEBUG(Service_APT, - "called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X," - "buffer_size=0x%08X, handle=0x%08X, size=0x%08zX, in_param_buffer_ptr=0x%08X", - src_app_id, dst_app_id, signal_type, buffer_size, handle, size, buffer); } void ReceiveParameter(Service::Interface* self) { @@ -234,6 +234,8 @@ void ReceiveParameter(Service::Interface* self) { "buffer_size is bigger than the size in the buffer descriptor (0x%08X > 0x%08zX)", buffer_size, static_buff_size); + LOG_DEBUG(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); + if (!next_parameter) { IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); rb.Push(ResultCode(ErrorDescription::NoData, ErrorModule::Applet, @@ -266,7 +268,6 @@ void ReceiveParameter(Service::Interface* self) { // Clear the parameter next_parameter = boost::none; - LOG_DEBUG(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); } void GlanceParameter(Service::Interface* self) { @@ -282,6 +283,8 @@ void GlanceParameter(Service::Interface* self) { "buffer_size is bigger than the size in the buffer descriptor (0x%08X > 0x%08zX)", buffer_size, static_buff_size); + LOG_DEBUG(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); + if (!next_parameter) { IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); rb.Push(ResultCode(ErrorDescription::NoData, ErrorModule::Applet, @@ -315,7 +318,6 @@ void GlanceParameter(Service::Interface* self) { if (next_parameter->signal == static_cast(SignalType::DspSleep) || next_parameter->signal == static_cast(SignalType::DspWakeup)) next_parameter = boost::none; - LOG_DEBUG(Service_APT, "called app_id=0x%08X, buffer_size=0x%08zX", app_id, buffer_size); } void CancelParameter(Service::Interface* self) { From 567c3a2ee7162e0e62d5ecd511e6d137a6b217c2 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Mon, 1 May 2017 20:55:45 +0100 Subject: [PATCH 034/195] tests: Arm testing framework --- src/tests/CMakeLists.txt | 2 + src/tests/core/arm/arm_test_common.cpp | 123 +++++++++++++++++++++++++ src/tests/core/arm/arm_test_common.h | 83 +++++++++++++++++ 3 files changed, 208 insertions(+) create mode 100644 src/tests/core/arm/arm_test_common.cpp create mode 100644 src/tests/core/arm/arm_test_common.h diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index a14df325a8..5882960bc4 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -1,5 +1,6 @@ set(SRCS common/param_package.cpp + core/arm/arm_test_common.cpp core/file_sys/path_parser.cpp core/hle/kernel/hle_ipc.cpp glad.cpp @@ -7,6 +8,7 @@ set(SRCS ) set(HEADERS + core/arm/arm_test_common.h ) create_directory_groups(${SRCS} ${HEADERS}) diff --git a/src/tests/core/arm/arm_test_common.cpp b/src/tests/core/arm/arm_test_common.cpp new file mode 100644 index 0000000000..1d41e3376c --- /dev/null +++ b/src/tests/core/arm/arm_test_common.cpp @@ -0,0 +1,123 @@ +// Copyright 2016 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/core.h" +#include "core/memory_setup.h" +#include "tests/core/arm/arm_test_common.h" + +namespace ArmTests { + +TestEnvironment::TestEnvironment(bool mutable_memory_) + : mutable_memory(mutable_memory_), test_memory(std::make_shared(this)) { + Memory::MapIoRegion(0x00000000, 0x80000000, test_memory); + Memory::MapIoRegion(0x80000000, 0x80000000, test_memory); +} + +TestEnvironment::~TestEnvironment() { + Memory::UnmapRegion(0x80000000, 0x80000000); + Memory::UnmapRegion(0x00000000, 0x80000000); +} + +void TestEnvironment::SetMemory64(VAddr vaddr, u64 value) { + SetMemory32(vaddr + 0, static_cast(value)); + SetMemory32(vaddr + 4, static_cast(value >> 32)); +} + +void TestEnvironment::SetMemory32(VAddr vaddr, u32 value) { + SetMemory16(vaddr + 0, static_cast(value)); + SetMemory16(vaddr + 2, static_cast(value >> 16)); +} + +void TestEnvironment::SetMemory16(VAddr vaddr, u16 value) { + SetMemory8(vaddr + 0, static_cast(value)); + SetMemory8(vaddr + 1, static_cast(value >> 8)); +} + +void TestEnvironment::SetMemory8(VAddr vaddr, u8 value) { + test_memory->data[vaddr] = value; +} + +std::vector TestEnvironment::GetWriteRecords() const { + return write_records; +} + +void TestEnvironment::ClearWriteRecords() { + write_records.clear(); +} + +TestEnvironment::TestMemory::~TestMemory() {} + +bool TestEnvironment::TestMemory::IsValidAddress(VAddr addr) { + return true; +} + +u8 TestEnvironment::TestMemory::Read8(VAddr addr) { + auto iter = data.find(addr); + if (iter == data.end()) { + return addr; // Some arbitrary data + } + return iter->second; +} + +u16 TestEnvironment::TestMemory::Read16(VAddr addr) { + return Read8(addr) | static_cast(Read8(addr + 1)) << 8; +} + +u32 TestEnvironment::TestMemory::Read32(VAddr addr) { + return Read16(addr) | static_cast(Read16(addr + 2)) << 16; +} + +u64 TestEnvironment::TestMemory::Read64(VAddr addr) { + return Read32(addr) | static_cast(Read32(addr + 4)) << 32; +} + +bool TestEnvironment::TestMemory::ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) { + VAddr addr = src_addr; + u8* data = static_cast(dest_buffer); + + for (size_t i = 0; i < size; i++, addr++, data++) { + *data = Read8(addr); + } + + return true; +} + +void TestEnvironment::TestMemory::Write8(VAddr addr, u8 data) { + env->write_records.emplace_back(8, addr, data); + if (env->mutable_memory) + env->SetMemory8(addr, data); +} + +void TestEnvironment::TestMemory::Write16(VAddr addr, u16 data) { + env->write_records.emplace_back(16, addr, data); + if (env->mutable_memory) + env->SetMemory16(addr, data); +} + +void TestEnvironment::TestMemory::Write32(VAddr addr, u32 data) { + env->write_records.emplace_back(32, addr, data); + if (env->mutable_memory) + env->SetMemory32(addr, data); +} + +void TestEnvironment::TestMemory::Write64(VAddr addr, u64 data) { + env->write_records.emplace_back(64, addr, data); + if (env->mutable_memory) + env->SetMemory64(addr, data); +} + +bool TestEnvironment::TestMemory::WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) { + VAddr addr = dest_addr; + const u8* data = static_cast(src_buffer); + + for (size_t i = 0; i < size; i++, addr++, data++) { + env->write_records.emplace_back(8, addr, *data); + if (env->mutable_memory) + env->SetMemory8(addr, *data); + } + + return true; +} + +} // namespace ArmTests diff --git a/src/tests/core/arm/arm_test_common.h b/src/tests/core/arm/arm_test_common.h new file mode 100644 index 0000000000..af747f8c98 --- /dev/null +++ b/src/tests/core/arm/arm_test_common.h @@ -0,0 +1,83 @@ +// Copyright 2016 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include +#include +#include + +#include "common/common_types.h" +#include "core/mmio.h" + +namespace ArmTests { + +struct WriteRecord { + WriteRecord(size_t size, VAddr addr, u64 data) : size(size), addr(addr), data(data) {} + size_t size; + VAddr addr; + u64 data; + bool operator==(const WriteRecord& o) const { + return std::tie(size, addr, data) == std::tie(o.size, o.addr, o.data); + } +}; + +class TestEnvironment final { +public: + /* + * Inititalise test environment + * @param mutable_memory If false, writes to memory can never be read back. (Memory is immutable.) + */ + explicit TestEnvironment(bool mutable_memory = false); + + /// Shutdown test environment + ~TestEnvironment(); + + /// Sets value at memory location vaddr. + void SetMemory8(VAddr vaddr, u8 value); + void SetMemory16(VAddr vaddr, u16 value); + void SetMemory32(VAddr vaddr, u32 value); + void SetMemory64(VAddr vaddr, u64 value); + + /** + * Whenever Memory::Write{8,16,32,64} is called within the test environment, + * a new write-record is made. + * @returns A vector of write records made since they were last cleared. + */ + std::vector GetWriteRecords() const; + + /// Empties the internal write-record store. + void ClearWriteRecords(); + +private: + friend struct TestMemory; + struct TestMemory final : Memory::MMIORegion { + explicit TestMemory(TestEnvironment* env_) : env(env_) {} + TestEnvironment* env; + + ~TestMemory() override; + + bool IsValidAddress(VAddr addr) override; + + u8 Read8(VAddr addr) override; + u16 Read16(VAddr addr) override; + u32 Read32(VAddr addr) override; + u64 Read64(VAddr addr) override; + + bool ReadBlock(VAddr src_addr, void* dest_buffer, size_t size) override; + + void Write8(VAddr addr, u8 data) override; + void Write16(VAddr addr, u16 data) override; + void Write32(VAddr addr, u32 data) override; + void Write64(VAddr addr, u64 data) override; + + bool WriteBlock(VAddr dest_addr, const void* src_buffer, size_t size) override; + + std::unordered_map data; + }; + + bool mutable_memory; + std::shared_ptr test_memory; + std::vector write_records; +}; + +} // namespace ArmTests From a08edd67eb1c5ed3a348f38f0fd5f9ebc280f5a9 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Mon, 1 May 2017 22:11:06 +0100 Subject: [PATCH 035/195] tests: Add tests for vadd --- CMakeLists.txt | 2 +- src/tests/CMakeLists.txt | 1 + src/tests/core/arm/arm_test_common.cpp | 2 +- src/tests/core/arm/arm_test_common.h | 3 +- .../core/arm/dyncom/arm_dyncom_vfp_tests.cpp | 50 + src/tests/core/arm/dyncom/vfp_vadd_f32.inc | 13456 ++++++++++++++++ 6 files changed, 13511 insertions(+), 3 deletions(-) create mode 100644 src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp create mode 100644 src/tests/core/arm/dyncom/vfp_vadd_f32.inc diff --git a/CMakeLists.txt b/CMakeLists.txt index 9151ff7861..79d8046d9d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -301,9 +301,9 @@ get_git_head_revision(GIT_REF_SPEC GIT_REV) git_describe(GIT_DESC --always --long --dirty) git_branch_name(GIT_BRANCH) +enable_testing() add_subdirectory(externals) add_subdirectory(src) -enable_testing() # Installation instructions diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 5882960bc4..5e9c4c2bff 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -1,6 +1,7 @@ set(SRCS common/param_package.cpp core/arm/arm_test_common.cpp + core/arm/dyncom/arm_dyncom_vfp_tests.cpp core/file_sys/path_parser.cpp core/hle/kernel/hle_ipc.cpp glad.cpp diff --git a/src/tests/core/arm/arm_test_common.cpp b/src/tests/core/arm/arm_test_common.cpp index 1d41e3376c..1df6c56773 100644 --- a/src/tests/core/arm/arm_test_common.cpp +++ b/src/tests/core/arm/arm_test_common.cpp @@ -9,7 +9,7 @@ namespace ArmTests { TestEnvironment::TestEnvironment(bool mutable_memory_) - : mutable_memory(mutable_memory_), test_memory(std::make_shared(this)) { + : mutable_memory(mutable_memory_), test_memory(std::make_shared(this)) { Memory::MapIoRegion(0x00000000, 0x80000000, test_memory); Memory::MapIoRegion(0x80000000, 0x80000000, test_memory); } diff --git a/src/tests/core/arm/arm_test_common.h b/src/tests/core/arm/arm_test_common.h index af747f8c98..592c28594f 100644 --- a/src/tests/core/arm/arm_test_common.h +++ b/src/tests/core/arm/arm_test_common.h @@ -25,7 +25,8 @@ class TestEnvironment final { public: /* * Inititalise test environment - * @param mutable_memory If false, writes to memory can never be read back. (Memory is immutable.) + * @param mutable_memory If false, writes to memory can never be read back. + * (Memory is immutable.) */ explicit TestEnvironment(bool mutable_memory = false); diff --git a/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp b/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp new file mode 100644 index 0000000000..86de41773c --- /dev/null +++ b/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp @@ -0,0 +1,50 @@ +// Copyright 2016 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include + +#include "core/arm/dyncom/arm_dyncom.h" +#include "tests/core/arm/arm_test_common.h" + +namespace ArmTests { + +struct VfpTestCase { + u32 initial_fpscr; + u32 a; + u32 b; + u32 result; + u32 final_fpscr; +}; + +TEST_CASE("ARM_DynCom (vfp): vadd", "[arm_dyncom]") { + TestEnvironment test_env(false); + test_env.SetMemory32(0, 0xEE321A03); // vadd.f32 s2, s4, s6 + test_env.SetMemory32(4, 0xEAFFFFFE); // b +#0 + + ARM_DynCom dyncom(USER32MODE); + + std::vector test_cases{{ +#include "vfp_vadd_f32.inc" + }}; + + for (const auto& test_case : test_cases) { + dyncom.down_count = 1000; // Ensure that CoreTimeing will not be called. + dyncom.SetPC(0); + dyncom.SetVFPSystemReg(VFP_FPSCR, test_case.initial_fpscr); + dyncom.SetVFPReg(4, test_case.a); + dyncom.SetVFPReg(6, test_case.b); + dyncom.ExecuteInstructions(1); + if (dyncom.GetVFPReg(2) != test_case.result || + dyncom.GetVFPSystemReg(VFP_FPSCR) != test_case.final_fpscr) { + printf("f: %x\n", test_case.initial_fpscr); + printf("a: %x\n", test_case.a); + printf("b: %x\n", test_case.b); + printf("c: %x (%x)\n", dyncom.GetVFPReg(2), test_case.result); + printf("f: %x (%x)\n", dyncom.GetVFPSystemReg(VFP_FPSCR), test_case.final_fpscr); + FAIL(); + } + } +} + +} // namespace ArmTests \ No newline at end of file diff --git a/src/tests/core/arm/dyncom/vfp_vadd_f32.inc b/src/tests/core/arm/dyncom/vfp_vadd_f32.inc new file mode 100644 index 0000000000..d0032c2e65 --- /dev/null +++ b/src/tests/core/arm/dyncom/vfp_vadd_f32.inc @@ -0,0 +1,13456 @@ +{0x3c00000, 0x0, 0x0, 0x0, 0x3c00000}, +{0x3c00000, 0x0, 0x1, 0x0, 0x3c00080}, +{0x3c00000, 0x0, 0x76, 0x0, 0x3c00080}, +{0x3c00000, 0x0, 0x2b94, 0x0, 0x3c00080}, +{0x3c00000, 0x0, 0x636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x0, 0x7fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x0, 0x800000, 0x800000, 0x3c00000}, +{0x3c00000, 0x0, 0x800002, 0x800002, 0x3c00000}, +{0x3c00000, 0x0, 0x1398437, 0x1398437, 0x3c00000}, +{0x3c00000, 0x0, 0xba98d27, 0xba98d27, 0x3c00000}, +{0x3c00000, 0x0, 0xba98d7a, 0xba98d7a, 0x3c00000}, +{0x3c00000, 0x0, 0x751f853a, 0x751f853a, 0x3c00000}, +{0x3c00000, 0x0, 0x7f7ffff0, 0x7f7ffff0, 0x3c00000}, +{0x3c00000, 0x0, 0x7f7fffff, 0x7f7fffff, 0x3c00000}, +{0x3c00000, 0x0, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x0, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x0, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x0, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x0, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x0, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x0, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x0, 0x80000000, 0x0, 0x3c00000}, +{0x3c00000, 0x0, 0x80000001, 0x0, 0x3c00080}, +{0x3c00000, 0x0, 0x80000076, 0x0, 0x3c00080}, +{0x3c00000, 0x0, 0x80002b94, 0x0, 0x3c00080}, +{0x3c00000, 0x0, 0x80636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x0, 0x807fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x0, 0x80800000, 0x80800000, 0x3c00000}, +{0x3c00000, 0x0, 0x80800002, 0x80800002, 0x3c00000}, +{0x3c00000, 0x0, 0x81398437, 0x81398437, 0x3c00000}, +{0x3c00000, 0x0, 0x8ba98d27, 0x8ba98d27, 0x3c00000}, +{0x3c00000, 0x0, 0x8ba98d7a, 0x8ba98d7a, 0x3c00000}, +{0x3c00000, 0x0, 0xf51f853a, 0xf51f853a, 0x3c00000}, +{0x3c00000, 0x0, 0xff7ffff0, 0xff7ffff0, 0x3c00000}, +{0x3c00000, 0x0, 0xff7fffff, 0xff7fffff, 0x3c00000}, +{0x3c00000, 0x0, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x0, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x0, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x0, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x0, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x0, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x0, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x0, 0x4f3495cb, 0x4f3495cb, 0x3c00000}, +{0x3c00000, 0x0, 0xe73a5134, 0xe73a5134, 0x3c00000}, +{0x3c00000, 0x0, 0x7c994e9e, 0x7c994e9e, 0x3c00000}, +{0x3c00000, 0x0, 0x6164bd6c, 0x6164bd6c, 0x3c00000}, +{0x3c00000, 0x0, 0x9503366, 0x9503366, 0x3c00000}, +{0x3c00000, 0x0, 0xbf5a97c9, 0xbf5a97c9, 0x3c00000}, +{0x3c00000, 0x0, 0xe6ff1a14, 0xe6ff1a14, 0x3c00000}, +{0x3c00000, 0x0, 0x77f31e2f, 0x77f31e2f, 0x3c00000}, +{0x3c00000, 0x0, 0xaab4d7d8, 0xaab4d7d8, 0x3c00000}, +{0x3c00000, 0x0, 0x966320b, 0x966320b, 0x3c00000}, +{0x3c00000, 0x0, 0xb26bddee, 0xb26bddee, 0x3c00000}, +{0x3c00000, 0x0, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00000}, +{0x3c00000, 0x0, 0x317285d3, 0x317285d3, 0x3c00000}, +{0x3c00000, 0x0, 0x3c9623b1, 0x3c9623b1, 0x3c00000}, +{0x3c00000, 0x0, 0x51fd2c7c, 0x51fd2c7c, 0x3c00000}, +{0x3c00000, 0x0, 0x7b906a6c, 0x7b906a6c, 0x3c00000}, +{0x3c00000, 0x1, 0x0, 0x0, 0x3c00080}, +{0x3c00000, 0x1, 0x1, 0x0, 0x3c00080}, +{0x3c00000, 0x1, 0x76, 0x0, 0x3c00080}, +{0x3c00000, 0x1, 0x2b94, 0x0, 0x3c00080}, +{0x3c00000, 0x1, 0x636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x1, 0x7fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x1, 0x800000, 0x800000, 0x3c00080}, +{0x3c00000, 0x1, 0x800002, 0x800002, 0x3c00080}, +{0x3c00000, 0x1, 0x1398437, 0x1398437, 0x3c00080}, +{0x3c00000, 0x1, 0xba98d27, 0xba98d27, 0x3c00080}, +{0x3c00000, 0x1, 0xba98d7a, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0x1, 0x751f853a, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x1, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x1, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x1, 0x7f800000, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x1, 0x7f800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x1, 0x7f984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x1, 0x7fbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x1, 0x7fc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x1, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x1, 0x7fffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x1, 0x80000000, 0x0, 0x3c00080}, +{0x3c00000, 0x1, 0x80000001, 0x0, 0x3c00080}, +{0x3c00000, 0x1, 0x80000076, 0x0, 0x3c00080}, +{0x3c00000, 0x1, 0x80002b94, 0x0, 0x3c00080}, +{0x3c00000, 0x1, 0x80636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x1, 0x807fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x1, 0x80800000, 0x80800000, 0x3c00080}, +{0x3c00000, 0x1, 0x80800002, 0x80800002, 0x3c00080}, +{0x3c00000, 0x1, 0x81398437, 0x81398437, 0x3c00080}, +{0x3c00000, 0x1, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x1, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x1, 0xf51f853a, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0x1, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0x1, 0xff7fffff, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0x1, 0xff800000, 0xff800000, 0x3c00080}, +{0x3c00000, 0x1, 0xff800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x1, 0xff984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x1, 0xffbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x1, 0xffc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x1, 0xffd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x1, 0xffffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x1, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x1, 0xe73a5134, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0x1, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x1, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x1, 0x9503366, 0x9503366, 0x3c00080}, +{0x3c00000, 0x1, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0x1, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0x1, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x1, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0x1, 0x966320b, 0x966320b, 0x3c00080}, +{0x3c00000, 0x1, 0xb26bddee, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0x1, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0x1, 0x317285d3, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x1, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x1, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x1, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x76, 0x0, 0x0, 0x3c00080}, +{0x3c00000, 0x76, 0x1, 0x0, 0x3c00080}, +{0x3c00000, 0x76, 0x76, 0x0, 0x3c00080}, +{0x3c00000, 0x76, 0x2b94, 0x0, 0x3c00080}, +{0x3c00000, 0x76, 0x636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x76, 0x7fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x76, 0x800000, 0x800000, 0x3c00080}, +{0x3c00000, 0x76, 0x800002, 0x800002, 0x3c00080}, +{0x3c00000, 0x76, 0x1398437, 0x1398437, 0x3c00080}, +{0x3c00000, 0x76, 0xba98d27, 0xba98d27, 0x3c00080}, +{0x3c00000, 0x76, 0xba98d7a, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0x76, 0x751f853a, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x76, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x76, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x76, 0x7f800000, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x76, 0x7f800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x76, 0x7f984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x76, 0x7fbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x76, 0x7fc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x76, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x76, 0x7fffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x76, 0x80000000, 0x0, 0x3c00080}, +{0x3c00000, 0x76, 0x80000001, 0x0, 0x3c00080}, +{0x3c00000, 0x76, 0x80000076, 0x0, 0x3c00080}, +{0x3c00000, 0x76, 0x80002b94, 0x0, 0x3c00080}, +{0x3c00000, 0x76, 0x80636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x76, 0x807fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x76, 0x80800000, 0x80800000, 0x3c00080}, +{0x3c00000, 0x76, 0x80800002, 0x80800002, 0x3c00080}, +{0x3c00000, 0x76, 0x81398437, 0x81398437, 0x3c00080}, +{0x3c00000, 0x76, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x76, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x76, 0xf51f853a, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0x76, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0x76, 0xff7fffff, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0x76, 0xff800000, 0xff800000, 0x3c00080}, +{0x3c00000, 0x76, 0xff800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x76, 0xff984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x76, 0xffbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x76, 0xffc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x76, 0xffd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x76, 0xffffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x76, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x76, 0xe73a5134, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0x76, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x76, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x76, 0x9503366, 0x9503366, 0x3c00080}, +{0x3c00000, 0x76, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0x76, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0x76, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x76, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0x76, 0x966320b, 0x966320b, 0x3c00080}, +{0x3c00000, 0x76, 0xb26bddee, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0x76, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0x76, 0x317285d3, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x76, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x76, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x76, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x2b94, 0x0, 0x0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x1, 0x0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x76, 0x0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x2b94, 0x0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x7fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x800000, 0x800000, 0x3c00080}, +{0x3c00000, 0x2b94, 0x800002, 0x800002, 0x3c00080}, +{0x3c00000, 0x2b94, 0x1398437, 0x1398437, 0x3c00080}, +{0x3c00000, 0x2b94, 0xba98d27, 0xba98d27, 0x3c00080}, +{0x3c00000, 0x2b94, 0xba98d7a, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0x2b94, 0x751f853a, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x2b94, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x2b94, 0x7f800000, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x2b94, 0x7f800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x2b94, 0x7f984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x2b94, 0x7fbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x2b94, 0x7fc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x2b94, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x2b94, 0x7fffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x2b94, 0x80000000, 0x0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x80000001, 0x0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x80000076, 0x0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x80002b94, 0x0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x80636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x807fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x2b94, 0x80800000, 0x80800000, 0x3c00080}, +{0x3c00000, 0x2b94, 0x80800002, 0x80800002, 0x3c00080}, +{0x3c00000, 0x2b94, 0x81398437, 0x81398437, 0x3c00080}, +{0x3c00000, 0x2b94, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x2b94, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x2b94, 0xf51f853a, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0x2b94, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0x2b94, 0xff7fffff, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0x2b94, 0xff800000, 0xff800000, 0x3c00080}, +{0x3c00000, 0x2b94, 0xff800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x2b94, 0xff984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x2b94, 0xffbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x2b94, 0xffc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x2b94, 0xffd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x2b94, 0xffffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x2b94, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x2b94, 0xe73a5134, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0x2b94, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x2b94, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x2b94, 0x9503366, 0x9503366, 0x3c00080}, +{0x3c00000, 0x2b94, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0x2b94, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0x2b94, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x2b94, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0x2b94, 0x966320b, 0x966320b, 0x3c00080}, +{0x3c00000, 0x2b94, 0xb26bddee, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0x2b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0x2b94, 0x317285d3, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x2b94, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x2b94, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x2b94, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x636d24, 0x0, 0x0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x1, 0x0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x76, 0x0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x2b94, 0x0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x7fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x800000, 0x800000, 0x3c00080}, +{0x3c00000, 0x636d24, 0x800002, 0x800002, 0x3c00080}, +{0x3c00000, 0x636d24, 0x1398437, 0x1398437, 0x3c00080}, +{0x3c00000, 0x636d24, 0xba98d27, 0xba98d27, 0x3c00080}, +{0x3c00000, 0x636d24, 0xba98d7a, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0x636d24, 0x751f853a, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x636d24, 0x7f800000, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x636d24, 0x7f800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x636d24, 0x7f984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x636d24, 0x7fbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x636d24, 0x7fc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x636d24, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x636d24, 0x7fffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x636d24, 0x80000000, 0x0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x80000001, 0x0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x80000076, 0x0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x80002b94, 0x0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x80636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x807fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x636d24, 0x80800000, 0x80800000, 0x3c00080}, +{0x3c00000, 0x636d24, 0x80800002, 0x80800002, 0x3c00080}, +{0x3c00000, 0x636d24, 0x81398437, 0x81398437, 0x3c00080}, +{0x3c00000, 0x636d24, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x636d24, 0xf51f853a, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0x636d24, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0x636d24, 0xff7fffff, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0x636d24, 0xff800000, 0xff800000, 0x3c00080}, +{0x3c00000, 0x636d24, 0xff800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x636d24, 0xff984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x636d24, 0xffbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x636d24, 0xffc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x636d24, 0xffd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x636d24, 0xffffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x636d24, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x636d24, 0xe73a5134, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0x636d24, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x636d24, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x636d24, 0x9503366, 0x9503366, 0x3c00080}, +{0x3c00000, 0x636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0x636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0x636d24, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0x636d24, 0x966320b, 0x966320b, 0x3c00080}, +{0x3c00000, 0x636d24, 0xb26bddee, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0x636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0x636d24, 0x317285d3, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x636d24, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x636d24, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x0, 0x0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x1, 0x0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x76, 0x0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x2b94, 0x0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x7fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x800000, 0x800000, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x800002, 0x800002, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x1398437, 0x1398437, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xba98d27, 0xba98d27, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xba98d7a, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x751f853a, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x7f800000, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x7f800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fffff, 0x7f984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fffff, 0x7fbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fffff, 0x7fc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x7fffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x80000000, 0x0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x80000001, 0x0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x80000076, 0x0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x80002b94, 0x0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x80636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x807fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x80800000, 0x80800000, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x80800002, 0x80800002, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x81398437, 0x81398437, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xf51f853a, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xff7fffff, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xff800000, 0xff800000, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xff800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fffff, 0xff984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fffff, 0xffbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fffff, 0xffc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xffd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xffffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xe73a5134, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x9503366, 0x9503366, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x966320b, 0x966320b, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xb26bddee, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0x7fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x317285d3, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x7fffff, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x800000, 0x0, 0x800000, 0x3c00000}, +{0x3c00000, 0x800000, 0x1, 0x800000, 0x3c00080}, +{0x3c00000, 0x800000, 0x76, 0x800000, 0x3c00080}, +{0x3c00000, 0x800000, 0x2b94, 0x800000, 0x3c00080}, +{0x3c00000, 0x800000, 0x636d24, 0x800000, 0x3c00080}, +{0x3c00000, 0x800000, 0x7fffff, 0x800000, 0x3c00080}, +{0x3c00000, 0x800000, 0x800000, 0x1000000, 0x3c00000}, +{0x3c00000, 0x800000, 0x800002, 0x1000001, 0x3c00000}, +{0x3c00000, 0x800000, 0x1398437, 0x1798437, 0x3c00000}, +{0x3c00000, 0x800000, 0xba98d27, 0xba98d29, 0x3c00000}, +{0x3c00000, 0x800000, 0xba98d7a, 0xba98d7c, 0x3c00000}, +{0x3c00000, 0x800000, 0x751f853a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x800000, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x800000, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x800000, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x800000, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x800000, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x800000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x800000, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x800000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x800000, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x800000, 0x80000000, 0x800000, 0x3c00000}, +{0x3c00000, 0x800000, 0x80000001, 0x800000, 0x3c00080}, +{0x3c00000, 0x800000, 0x80000076, 0x800000, 0x3c00080}, +{0x3c00000, 0x800000, 0x80002b94, 0x800000, 0x3c00080}, +{0x3c00000, 0x800000, 0x80636d24, 0x800000, 0x3c00080}, +{0x3c00000, 0x800000, 0x807fffff, 0x800000, 0x3c00080}, +{0x3c00000, 0x800000, 0x80800000, 0x0, 0x3c00000}, +{0x3c00000, 0x800000, 0x80800002, 0x0, 0x3c00008}, +{0x3c00000, 0x800000, 0x81398437, 0x80f3086e, 0x3c00000}, +{0x3c00000, 0x800000, 0x8ba98d27, 0x8ba98d25, 0x3c00000}, +{0x3c00000, 0x800000, 0x8ba98d7a, 0x8ba98d78, 0x3c00000}, +{0x3c00000, 0x800000, 0xf51f853a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0x800000, 0xff7ffff0, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0x800000, 0xff7fffff, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0x800000, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x800000, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x800000, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x800000, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x800000, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x800000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x800000, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x800000, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x800000, 0xe73a5134, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0x800000, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x800000, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x800000, 0x9503366, 0x95033a6, 0x3c00000}, +{0x3c00000, 0x800000, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0x800000, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0x800000, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x800000, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0x800000, 0x966320b, 0x966324b, 0x3c00000}, +{0x3c00000, 0x800000, 0xb26bddee, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0x800000, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0x800000, 0x317285d3, 0x317285d3, 0x3c00010}, +{0x3c00000, 0x800000, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0x800000, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x800000, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x800002, 0x0, 0x800002, 0x3c00000}, +{0x3c00000, 0x800002, 0x1, 0x800002, 0x3c00080}, +{0x3c00000, 0x800002, 0x76, 0x800002, 0x3c00080}, +{0x3c00000, 0x800002, 0x2b94, 0x800002, 0x3c00080}, +{0x3c00000, 0x800002, 0x636d24, 0x800002, 0x3c00080}, +{0x3c00000, 0x800002, 0x7fffff, 0x800002, 0x3c00080}, +{0x3c00000, 0x800002, 0x800000, 0x1000001, 0x3c00000}, +{0x3c00000, 0x800002, 0x800002, 0x1000002, 0x3c00000}, +{0x3c00000, 0x800002, 0x1398437, 0x1798438, 0x3c00000}, +{0x3c00000, 0x800002, 0xba98d27, 0xba98d29, 0x3c00010}, +{0x3c00000, 0x800002, 0xba98d7a, 0xba98d7c, 0x3c00010}, +{0x3c00000, 0x800002, 0x751f853a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x800002, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x800002, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x800002, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x800002, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x800002, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x800002, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x800002, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x800002, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x800002, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x800002, 0x80000000, 0x800002, 0x3c00000}, +{0x3c00000, 0x800002, 0x80000001, 0x800002, 0x3c00080}, +{0x3c00000, 0x800002, 0x80000076, 0x800002, 0x3c00080}, +{0x3c00000, 0x800002, 0x80002b94, 0x800002, 0x3c00080}, +{0x3c00000, 0x800002, 0x80636d24, 0x800002, 0x3c00080}, +{0x3c00000, 0x800002, 0x807fffff, 0x800002, 0x3c00080}, +{0x3c00000, 0x800002, 0x80800000, 0x0, 0x3c00008}, +{0x3c00000, 0x800002, 0x80800002, 0x0, 0x3c00000}, +{0x3c00000, 0x800002, 0x81398437, 0x80f3086c, 0x3c00000}, +{0x3c00000, 0x800002, 0x8ba98d27, 0x8ba98d24, 0x3c00010}, +{0x3c00000, 0x800002, 0x8ba98d7a, 0x8ba98d77, 0x3c00010}, +{0x3c00000, 0x800002, 0xf51f853a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0x800002, 0xff7ffff0, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0x800002, 0xff7fffff, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0x800002, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x800002, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x800002, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x800002, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x800002, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x800002, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x800002, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x800002, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x800002, 0xe73a5134, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0x800002, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x800002, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x800002, 0x9503366, 0x95033a6, 0x3c00010}, +{0x3c00000, 0x800002, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0x800002, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0x800002, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x800002, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0x800002, 0x966320b, 0x966324b, 0x3c00010}, +{0x3c00000, 0x800002, 0xb26bddee, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0x800002, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0x800002, 0x317285d3, 0x317285d3, 0x3c00010}, +{0x3c00000, 0x800002, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0x800002, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x800002, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x1398437, 0x0, 0x1398437, 0x3c00000}, +{0x3c00000, 0x1398437, 0x1, 0x1398437, 0x3c00080}, +{0x3c00000, 0x1398437, 0x76, 0x1398437, 0x3c00080}, +{0x3c00000, 0x1398437, 0x2b94, 0x1398437, 0x3c00080}, +{0x3c00000, 0x1398437, 0x636d24, 0x1398437, 0x3c00080}, +{0x3c00000, 0x1398437, 0x7fffff, 0x1398437, 0x3c00080}, +{0x3c00000, 0x1398437, 0x800000, 0x1798437, 0x3c00000}, +{0x3c00000, 0x1398437, 0x800002, 0x1798438, 0x3c00000}, +{0x3c00000, 0x1398437, 0x1398437, 0x1b98437, 0x3c00000}, +{0x3c00000, 0x1398437, 0xba98d27, 0xba98d2c, 0x3c00010}, +{0x3c00000, 0x1398437, 0xba98d7a, 0xba98d7f, 0x3c00010}, +{0x3c00000, 0x1398437, 0x751f853a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x1398437, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x1398437, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x1398437, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x1398437, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x1398437, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x1398437, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x1398437, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x1398437, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x1398437, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x1398437, 0x80000000, 0x1398437, 0x3c00000}, +{0x3c00000, 0x1398437, 0x80000001, 0x1398437, 0x3c00080}, +{0x3c00000, 0x1398437, 0x80000076, 0x1398437, 0x3c00080}, +{0x3c00000, 0x1398437, 0x80002b94, 0x1398437, 0x3c00080}, +{0x3c00000, 0x1398437, 0x80636d24, 0x1398437, 0x3c00080}, +{0x3c00000, 0x1398437, 0x807fffff, 0x1398437, 0x3c00080}, +{0x3c00000, 0x1398437, 0x80800000, 0xf3086e, 0x3c00000}, +{0x3c00000, 0x1398437, 0x80800002, 0xf3086c, 0x3c00000}, +{0x3c00000, 0x1398437, 0x81398437, 0x0, 0x3c00000}, +{0x3c00000, 0x1398437, 0x8ba98d27, 0x8ba98d21, 0x3c00010}, +{0x3c00000, 0x1398437, 0x8ba98d7a, 0x8ba98d74, 0x3c00010}, +{0x3c00000, 0x1398437, 0xf51f853a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0x1398437, 0xff7ffff0, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0x1398437, 0xff7fffff, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0x1398437, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x1398437, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x1398437, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x1398437, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x1398437, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x1398437, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x1398437, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x1398437, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x1398437, 0xe73a5134, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0x1398437, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x1398437, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x1398437, 0x9503366, 0x950341f, 0x3c00010}, +{0x3c00000, 0x1398437, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0x1398437, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0x1398437, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x1398437, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0x1398437, 0x966320b, 0x96632c4, 0x3c00010}, +{0x3c00000, 0x1398437, 0xb26bddee, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0x1398437, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0x1398437, 0x317285d3, 0x317285d3, 0x3c00010}, +{0x3c00000, 0x1398437, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0x1398437, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x1398437, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x0, 0xba98d27, 0x3c00000}, +{0x3c00000, 0xba98d27, 0x1, 0xba98d27, 0x3c00080}, +{0x3c00000, 0xba98d27, 0x76, 0xba98d27, 0x3c00080}, +{0x3c00000, 0xba98d27, 0x2b94, 0xba98d27, 0x3c00080}, +{0x3c00000, 0xba98d27, 0x636d24, 0xba98d27, 0x3c00080}, +{0x3c00000, 0xba98d27, 0x7fffff, 0xba98d27, 0x3c00080}, +{0x3c00000, 0xba98d27, 0x800000, 0xba98d29, 0x3c00000}, +{0x3c00000, 0xba98d27, 0x800002, 0xba98d29, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x1398437, 0xba98d2c, 0x3c00010}, +{0x3c00000, 0xba98d27, 0xba98d27, 0xc298d27, 0x3c00000}, +{0x3c00000, 0xba98d27, 0xba98d7a, 0xc298d50, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x751f853a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0xba98d27, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xba98d27, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xba98d27, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xba98d27, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xba98d27, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xba98d27, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xba98d27, 0x80000000, 0xba98d27, 0x3c00000}, +{0x3c00000, 0xba98d27, 0x80000001, 0xba98d27, 0x3c00080}, +{0x3c00000, 0xba98d27, 0x80000076, 0xba98d27, 0x3c00080}, +{0x3c00000, 0xba98d27, 0x80002b94, 0xba98d27, 0x3c00080}, +{0x3c00000, 0xba98d27, 0x80636d24, 0xba98d27, 0x3c00080}, +{0x3c00000, 0xba98d27, 0x807fffff, 0xba98d27, 0x3c00080}, +{0x3c00000, 0xba98d27, 0x80800000, 0xba98d25, 0x3c00000}, +{0x3c00000, 0xba98d27, 0x80800002, 0xba98d24, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x81398437, 0xba98d21, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x8ba98d27, 0x0, 0x3c00000}, +{0x3c00000, 0xba98d27, 0x8ba98d7a, 0x83260000, 0x3c00000}, +{0x3c00000, 0xba98d27, 0xf51f853a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xba98d27, 0xff7ffff0, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xba98d27, 0xff7fffff, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xba98d27, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xba98d27, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xba98d27, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xba98d27, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xba98d27, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xba98d27, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xba98d27, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xba98d27, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0xba98d27, 0xe73a5134, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x9503366, 0xbb00ec2, 0x3c00010}, +{0x3c00000, 0xba98d27, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0xba98d27, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0xba98d27, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x966320b, 0xbb0beb7, 0x3c00010}, +{0x3c00000, 0xba98d27, 0xb26bddee, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0xba98d27, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x317285d3, 0x317285d3, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0xba98d27, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x0, 0xba98d7a, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0x1, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0xba98d7a, 0x76, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0xba98d7a, 0x2b94, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0xba98d7a, 0x636d24, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0xba98d7a, 0x7fffff, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0xba98d7a, 0x800000, 0xba98d7c, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0x800002, 0xba98d7c, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x1398437, 0xba98d7f, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0xba98d27, 0xc298d50, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0xba98d7a, 0xc298d7a, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0x751f853a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xba98d7a, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xba98d7a, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xba98d7a, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0x80000000, 0xba98d7a, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0x80000001, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0xba98d7a, 0x80000076, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0xba98d7a, 0x80002b94, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0xba98d7a, 0x80636d24, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0xba98d7a, 0x807fffff, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0xba98d7a, 0x80800000, 0xba98d78, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0x80800002, 0xba98d77, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x81398437, 0xba98d74, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x8ba98d27, 0x3260000, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0x8ba98d7a, 0x0, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0xf51f853a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0xff7ffff0, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0xff7fffff, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xba98d7a, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xba98d7a, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xba98d7a, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0xe73a5134, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x9503366, 0xbb00f15, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x966320b, 0xbb0bf0a, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0xb26bddee, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x317285d3, 0x317285d3, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0xba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x0, 0x751f853a, 0x3c00000}, +{0x3c00000, 0x751f853a, 0x1, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x751f853a, 0x76, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x751f853a, 0x2b94, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x751f853a, 0x636d24, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x751f853a, 0x7fffff, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x751f853a, 0x800000, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x800002, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x1398437, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x751f853a, 0xba98d27, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x751f853a, 0xba98d7a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x751f853a, 0x759f853a, 0x3c00000}, +{0x3c00000, 0x751f853a, 0x7f7ffff0, 0x7f7ffff9, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x7f7fffff, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x751f853a, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x751f853a, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x751f853a, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x751f853a, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x751f853a, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x751f853a, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x751f853a, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x751f853a, 0x80000000, 0x751f853a, 0x3c00000}, +{0x3c00000, 0x751f853a, 0x80000001, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x751f853a, 0x80000076, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x751f853a, 0x80002b94, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x751f853a, 0x80636d24, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x751f853a, 0x807fffff, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x751f853a, 0x80800000, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x80800002, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x81398437, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x8ba98d27, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x8ba98d7a, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x751f853a, 0xf51f853a, 0x0, 0x3c00000}, +{0x3c00000, 0x751f853a, 0xff7ffff0, 0xff7fffe6, 0x3c00010}, +{0x3c00000, 0x751f853a, 0xff7fffff, 0xff7ffff5, 0x3c00010}, +{0x3c00000, 0x751f853a, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x751f853a, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x751f853a, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x751f853a, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x751f853a, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x751f853a, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x751f853a, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x751f853a, 0x4f3495cb, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x751f853a, 0xe73a5134, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x7c994e9e, 0x7c994fdd, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x6164bd6c, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x9503366, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x751f853a, 0xbf5a97c9, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x751f853a, 0xe6ff1a14, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x77f31e2f, 0x77f81a58, 0x3c00010}, +{0x3c00000, 0x751f853a, 0xaab4d7d8, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x966320b, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x751f853a, 0xb26bddee, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x751f853a, 0xb5c8e5d3, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x317285d3, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x3c9623b1, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x51fd2c7c, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x751f853a, 0x7b906a6c, 0x7b906f68, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x0, 0x7f7ffff0, 0x3c00000}, +{0x3c00000, 0x7f7ffff0, 0x1, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x7f7ffff0, 0x76, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x7f7ffff0, 0x2b94, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x7f7ffff0, 0x636d24, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x7f7ffff0, 0x7fffff, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x7f7ffff0, 0x800000, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x800002, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x1398437, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0xba98d27, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0xba98d7a, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x751f853a, 0x7f7ffff9, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x7f7ffff0, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7f7ffff0, 0x7f7fffff, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7f7ffff0, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f7ffff0, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f7ffff0, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f7ffff0, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f7ffff0, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f7ffff0, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f7ffff0, 0x80000000, 0x7f7ffff0, 0x3c00000}, +{0x3c00000, 0x7f7ffff0, 0x80000001, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x7f7ffff0, 0x80000076, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x7f7ffff0, 0x80002b94, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x7f7ffff0, 0x80636d24, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x7f7ffff0, 0x807fffff, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x7f7ffff0, 0x80800000, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x80800002, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x81398437, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x8ba98d27, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x8ba98d7a, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0xf51f853a, 0x7f7fffe6, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0xff7ffff0, 0x0, 0x3c00000}, +{0x3c00000, 0x7f7ffff0, 0xff7fffff, 0xf5700000, 0x3c00000}, +{0x3c00000, 0x7f7ffff0, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x7f7ffff0, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f7ffff0, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f7ffff0, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f7ffff0, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f7ffff0, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f7ffff0, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f7ffff0, 0x4f3495cb, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0xe73a5134, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x7c994e9e, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7f7ffff0, 0x6164bd6c, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x9503366, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0xbf5a97c9, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0xe6ff1a14, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x77f31e2f, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7f7ffff0, 0xaab4d7d8, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x966320b, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0xb26bddee, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0xb5c8e5d3, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x317285d3, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x3c9623b1, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x51fd2c7c, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x7f7ffff0, 0x7b906a6c, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7f7fffff, 0x0, 0x7f7fffff, 0x3c00000}, +{0x3c00000, 0x7f7fffff, 0x1, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x7f7fffff, 0x76, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x7f7fffff, 0x2b94, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x7f7fffff, 0x636d24, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x7f7fffff, 0x7fffff, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x7f7fffff, 0x800000, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x800002, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x1398437, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0xba98d27, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0xba98d7a, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x751f853a, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7f7fffff, 0x7f7ffff0, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7f7fffff, 0x7f7fffff, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7f7fffff, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f7fffff, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f7fffff, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f7fffff, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f7fffff, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f7fffff, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f7fffff, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f7fffff, 0x80000000, 0x7f7fffff, 0x3c00000}, +{0x3c00000, 0x7f7fffff, 0x80000001, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x7f7fffff, 0x80000076, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x7f7fffff, 0x80002b94, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x7f7fffff, 0x80636d24, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x7f7fffff, 0x807fffff, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x7f7fffff, 0x80800000, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x80800002, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x81398437, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x8ba98d27, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x8ba98d7a, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0xf51f853a, 0x7f7ffff5, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0xff7ffff0, 0x75700000, 0x3c00000}, +{0x3c00000, 0x7f7fffff, 0xff7fffff, 0x0, 0x3c00000}, +{0x3c00000, 0x7f7fffff, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x7f7fffff, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f7fffff, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f7fffff, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f7fffff, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f7fffff, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f7fffff, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f7fffff, 0x4f3495cb, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0xe73a5134, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x7c994e9e, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7f7fffff, 0x6164bd6c, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x9503366, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0xbf5a97c9, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0xe6ff1a14, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x77f31e2f, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7f7fffff, 0xaab4d7d8, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x966320b, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0xb26bddee, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0xb5c8e5d3, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x317285d3, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x3c9623b1, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x51fd2c7c, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x7f7fffff, 0x7b906a6c, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7f800000, 0x0, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x1, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x7f800000, 0x76, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x7f800000, 0x2b94, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x7f800000, 0x636d24, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x7f800000, 0x7fffff, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x7f800000, 0x800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x800002, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x1398437, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xba98d27, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xba98d7a, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x751f853a, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x7f7ffff0, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x7f7fffff, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800000, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800000, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x80000000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x80000001, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x7f800000, 0x80000076, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x7f800000, 0x80002b94, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x7f800000, 0x80636d24, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x7f800000, 0x807fffff, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x7f800000, 0x80800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x80800002, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x81398437, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x8ba98d27, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x8ba98d7a, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xf51f853a, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xff7ffff0, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xff7fffff, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xff800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800000, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800000, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800000, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800000, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x4f3495cb, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xe73a5134, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x7c994e9e, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x6164bd6c, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x9503366, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xbf5a97c9, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xe6ff1a14, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x77f31e2f, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xaab4d7d8, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x966320b, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xb26bddee, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0xb5c8e5d3, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x317285d3, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x3c9623b1, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x51fd2c7c, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800000, 0x7b906a6c, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7f800001, 0x0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x1, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f800001, 0x76, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f800001, 0x2b94, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f800001, 0x636d24, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f800001, 0x7fffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f800001, 0x800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x800002, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x1398437, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xba98d27, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xba98d7a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x751f853a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x7f7ffff0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x7f7fffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x7f800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x7fc00000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x7fd9ba98, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x7fffffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x80000000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x80000001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f800001, 0x80000076, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f800001, 0x80002b94, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f800001, 0x80636d24, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f800001, 0x807fffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f800001, 0x80800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x80800002, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x81398437, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x8ba98d27, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x8ba98d7a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xf51f853a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xff7ffff0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xff7fffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xff800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xffc00000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xffd9ba98, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xffffffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x4f3495cb, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xe73a5134, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x7c994e9e, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x6164bd6c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x9503366, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xbf5a97c9, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xe6ff1a14, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x77f31e2f, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xaab4d7d8, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x966320b, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xb26bddee, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0xb5c8e5d3, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x317285d3, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x3c9623b1, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x51fd2c7c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f800001, 0x7b906a6c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x1, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f984a37, 0x76, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f984a37, 0x2b94, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f984a37, 0x636d24, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f984a37, 0x7fffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f984a37, 0x800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x800002, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x1398437, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xba98d27, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xba98d7a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x751f853a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x7f7ffff0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x7f7fffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x7f800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x7fc00000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x7fd9ba98, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x7fffffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x80000000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x80000001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f984a37, 0x80000076, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f984a37, 0x80002b94, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f984a37, 0x80636d24, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f984a37, 0x807fffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7f984a37, 0x80800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x80800002, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x81398437, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x8ba98d27, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x8ba98d7a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xf51f853a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xff7ffff0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xff7fffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xff800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xffc00000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xffd9ba98, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xffffffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x4f3495cb, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xe73a5134, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x7c994e9e, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x6164bd6c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x9503366, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xbf5a97c9, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xe6ff1a14, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x77f31e2f, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xaab4d7d8, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x966320b, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xb26bddee, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0xb5c8e5d3, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x317285d3, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x3c9623b1, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x51fd2c7c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7f984a37, 0x7b906a6c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x1, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fbfffff, 0x76, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fbfffff, 0x2b94, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fbfffff, 0x636d24, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fbfffff, 0x7fffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fbfffff, 0x800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x800002, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x1398437, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xba98d27, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xba98d7a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x751f853a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x7f7ffff0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x7f7fffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x7f800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x7fc00000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x7fd9ba98, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x7fffffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x80000000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x80000001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fbfffff, 0x80000076, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fbfffff, 0x80002b94, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fbfffff, 0x80636d24, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fbfffff, 0x807fffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x7fbfffff, 0x80800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x80800002, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x81398437, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x8ba98d27, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x8ba98d7a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xf51f853a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xff7ffff0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xff7fffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xff800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xffc00000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xffd9ba98, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xffffffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x4f3495cb, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xe73a5134, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x7c994e9e, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x6164bd6c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x9503366, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xbf5a97c9, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xe6ff1a14, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x77f31e2f, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xaab4d7d8, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x966320b, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xb26bddee, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x317285d3, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x3c9623b1, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x51fd2c7c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fbfffff, 0x7b906a6c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fc00000, 0x0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x1, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fc00000, 0x76, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fc00000, 0x2b94, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fc00000, 0x636d24, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fc00000, 0x7fffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fc00000, 0x800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x800002, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x1398437, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xba98d27, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xba98d7a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x751f853a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x7f7ffff0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x7f7fffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x7f800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fc00000, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fc00000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fc00000, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x80000000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x80000001, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fc00000, 0x80000076, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fc00000, 0x80002b94, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fc00000, 0x80636d24, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fc00000, 0x807fffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fc00000, 0x80800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x80800002, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x81398437, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x8ba98d27, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x8ba98d7a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xf51f853a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xff7ffff0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xff7fffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xff800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fc00000, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fc00000, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fc00000, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x4f3495cb, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xe73a5134, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x7c994e9e, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x6164bd6c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x9503366, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xbf5a97c9, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xe6ff1a14, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x77f31e2f, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xaab4d7d8, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x966320b, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xb26bddee, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0xb5c8e5d3, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x317285d3, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x3c9623b1, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x51fd2c7c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fc00000, 0x7b906a6c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x1, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fd9ba98, 0x76, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fd9ba98, 0x2b94, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fd9ba98, 0x636d24, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fd9ba98, 0x7fffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fd9ba98, 0x800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x800002, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x1398437, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xba98d27, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xba98d7a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x751f853a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x7f7fffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x7f800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fd9ba98, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fd9ba98, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fd9ba98, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x80000000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x80000001, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fd9ba98, 0x80000076, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fd9ba98, 0x80002b94, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fd9ba98, 0x80636d24, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fd9ba98, 0x807fffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fd9ba98, 0x80800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x80800002, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x81398437, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x8ba98d27, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xf51f853a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xff7ffff0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xff7fffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xff800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fd9ba98, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fd9ba98, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fd9ba98, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x4f3495cb, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xe73a5134, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x7c994e9e, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x6164bd6c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x9503366, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x77f31e2f, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x966320b, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xb26bddee, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x317285d3, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x3c9623b1, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fd9ba98, 0x7b906a6c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x1, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffffff, 0x76, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffffff, 0x2b94, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffffff, 0x636d24, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffffff, 0x7fffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffffff, 0x800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x800002, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x1398437, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xba98d27, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xba98d7a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x751f853a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x7f7ffff0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x7f7fffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x7f800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fffffff, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fffffff, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fffffff, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x80000000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x80000001, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffffff, 0x80000076, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffffff, 0x80002b94, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffffff, 0x80636d24, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffffff, 0x807fffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x7fffffff, 0x80800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x80800002, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x81398437, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x8ba98d27, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x8ba98d7a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xf51f853a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xff7ffff0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xff7fffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xff800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fffffff, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fffffff, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7fffffff, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x4f3495cb, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xe73a5134, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x7c994e9e, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x6164bd6c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x9503366, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xbf5a97c9, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xe6ff1a14, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x77f31e2f, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xaab4d7d8, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x966320b, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xb26bddee, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0xb5c8e5d3, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x317285d3, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x3c9623b1, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x51fd2c7c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7fffffff, 0x7b906a6c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80000000, 0x0, 0x0, 0x3c00000}, +{0x3c00000, 0x80000000, 0x1, 0x0, 0x3c00080}, +{0x3c00000, 0x80000000, 0x76, 0x0, 0x3c00080}, +{0x3c00000, 0x80000000, 0x2b94, 0x0, 0x3c00080}, +{0x3c00000, 0x80000000, 0x636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x80000000, 0x7fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x80000000, 0x800000, 0x800000, 0x3c00000}, +{0x3c00000, 0x80000000, 0x800002, 0x800002, 0x3c00000}, +{0x3c00000, 0x80000000, 0x1398437, 0x1398437, 0x3c00000}, +{0x3c00000, 0x80000000, 0xba98d27, 0xba98d27, 0x3c00000}, +{0x3c00000, 0x80000000, 0xba98d7a, 0xba98d7a, 0x3c00000}, +{0x3c00000, 0x80000000, 0x751f853a, 0x751f853a, 0x3c00000}, +{0x3c00000, 0x80000000, 0x7f7ffff0, 0x7f7ffff0, 0x3c00000}, +{0x3c00000, 0x80000000, 0x7f7fffff, 0x7f7fffff, 0x3c00000}, +{0x3c00000, 0x80000000, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x80000000, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80000000, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80000000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80000000, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80000000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80000000, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80000000, 0x80000000, 0x80000000, 0x3c00000}, +{0x3c00000, 0x80000000, 0x80000001, 0x0, 0x3c00080}, +{0x3c00000, 0x80000000, 0x80000076, 0x0, 0x3c00080}, +{0x3c00000, 0x80000000, 0x80002b94, 0x0, 0x3c00080}, +{0x3c00000, 0x80000000, 0x80636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x80000000, 0x807fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x80000000, 0x80800000, 0x80800000, 0x3c00000}, +{0x3c00000, 0x80000000, 0x80800002, 0x80800002, 0x3c00000}, +{0x3c00000, 0x80000000, 0x81398437, 0x81398437, 0x3c00000}, +{0x3c00000, 0x80000000, 0x8ba98d27, 0x8ba98d27, 0x3c00000}, +{0x3c00000, 0x80000000, 0x8ba98d7a, 0x8ba98d7a, 0x3c00000}, +{0x3c00000, 0x80000000, 0xf51f853a, 0xf51f853a, 0x3c00000}, +{0x3c00000, 0x80000000, 0xff7ffff0, 0xff7ffff0, 0x3c00000}, +{0x3c00000, 0x80000000, 0xff7fffff, 0xff7fffff, 0x3c00000}, +{0x3c00000, 0x80000000, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x80000000, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80000000, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80000000, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80000000, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80000000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80000000, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80000000, 0x4f3495cb, 0x4f3495cb, 0x3c00000}, +{0x3c00000, 0x80000000, 0xe73a5134, 0xe73a5134, 0x3c00000}, +{0x3c00000, 0x80000000, 0x7c994e9e, 0x7c994e9e, 0x3c00000}, +{0x3c00000, 0x80000000, 0x6164bd6c, 0x6164bd6c, 0x3c00000}, +{0x3c00000, 0x80000000, 0x9503366, 0x9503366, 0x3c00000}, +{0x3c00000, 0x80000000, 0xbf5a97c9, 0xbf5a97c9, 0x3c00000}, +{0x3c00000, 0x80000000, 0xe6ff1a14, 0xe6ff1a14, 0x3c00000}, +{0x3c00000, 0x80000000, 0x77f31e2f, 0x77f31e2f, 0x3c00000}, +{0x3c00000, 0x80000000, 0xaab4d7d8, 0xaab4d7d8, 0x3c00000}, +{0x3c00000, 0x80000000, 0x966320b, 0x966320b, 0x3c00000}, +{0x3c00000, 0x80000000, 0xb26bddee, 0xb26bddee, 0x3c00000}, +{0x3c00000, 0x80000000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00000}, +{0x3c00000, 0x80000000, 0x317285d3, 0x317285d3, 0x3c00000}, +{0x3c00000, 0x80000000, 0x3c9623b1, 0x3c9623b1, 0x3c00000}, +{0x3c00000, 0x80000000, 0x51fd2c7c, 0x51fd2c7c, 0x3c00000}, +{0x3c00000, 0x80000000, 0x7b906a6c, 0x7b906a6c, 0x3c00000}, +{0x3c00000, 0x80000001, 0x0, 0x0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x1, 0x0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x76, 0x0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x2b94, 0x0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x7fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x800000, 0x800000, 0x3c00080}, +{0x3c00000, 0x80000001, 0x800002, 0x800002, 0x3c00080}, +{0x3c00000, 0x80000001, 0x1398437, 0x1398437, 0x3c00080}, +{0x3c00000, 0x80000001, 0xba98d27, 0xba98d27, 0x3c00080}, +{0x3c00000, 0x80000001, 0xba98d7a, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0x80000001, 0x751f853a, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x80000001, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x80000001, 0x7f800000, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x80000001, 0x7f800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80000001, 0x7f984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80000001, 0x7fbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80000001, 0x7fc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80000001, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80000001, 0x7fffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80000001, 0x80000000, 0x0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x80000001, 0x0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x80000076, 0x0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x80002b94, 0x0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x80636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x807fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x80000001, 0x80800000, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80000001, 0x80800002, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80000001, 0x81398437, 0x81398437, 0x3c00080}, +{0x3c00000, 0x80000001, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x80000001, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x80000001, 0xf51f853a, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0x80000001, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0x80000001, 0xff7fffff, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0x80000001, 0xff800000, 0xff800000, 0x3c00080}, +{0x3c00000, 0x80000001, 0xff800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80000001, 0xff984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80000001, 0xffbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80000001, 0xffc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80000001, 0xffd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80000001, 0xffffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80000001, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x80000001, 0xe73a5134, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0x80000001, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x80000001, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x80000001, 0x9503366, 0x9503366, 0x3c00080}, +{0x3c00000, 0x80000001, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0x80000001, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0x80000001, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x80000001, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0x80000001, 0x966320b, 0x966320b, 0x3c00080}, +{0x3c00000, 0x80000001, 0xb26bddee, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0x80000001, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0x80000001, 0x317285d3, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x80000001, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x80000001, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x80000001, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x80000076, 0x0, 0x0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x1, 0x0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x76, 0x0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x2b94, 0x0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x7fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x800000, 0x800000, 0x3c00080}, +{0x3c00000, 0x80000076, 0x800002, 0x800002, 0x3c00080}, +{0x3c00000, 0x80000076, 0x1398437, 0x1398437, 0x3c00080}, +{0x3c00000, 0x80000076, 0xba98d27, 0xba98d27, 0x3c00080}, +{0x3c00000, 0x80000076, 0xba98d7a, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0x80000076, 0x751f853a, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x80000076, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x80000076, 0x7f800000, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x80000076, 0x7f800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80000076, 0x7f984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80000076, 0x7fbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80000076, 0x7fc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80000076, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80000076, 0x7fffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80000076, 0x80000000, 0x0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x80000001, 0x0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x80000076, 0x0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x80002b94, 0x0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x80636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x807fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x80000076, 0x80800000, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80000076, 0x80800002, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80000076, 0x81398437, 0x81398437, 0x3c00080}, +{0x3c00000, 0x80000076, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x80000076, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x80000076, 0xf51f853a, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0x80000076, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0x80000076, 0xff7fffff, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0x80000076, 0xff800000, 0xff800000, 0x3c00080}, +{0x3c00000, 0x80000076, 0xff800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80000076, 0xff984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80000076, 0xffbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80000076, 0xffc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80000076, 0xffd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80000076, 0xffffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80000076, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x80000076, 0xe73a5134, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0x80000076, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x80000076, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x80000076, 0x9503366, 0x9503366, 0x3c00080}, +{0x3c00000, 0x80000076, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0x80000076, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0x80000076, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x80000076, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0x80000076, 0x966320b, 0x966320b, 0x3c00080}, +{0x3c00000, 0x80000076, 0xb26bddee, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0x80000076, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0x80000076, 0x317285d3, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x80000076, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x80000076, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x80000076, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x0, 0x0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x1, 0x0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x76, 0x0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x2b94, 0x0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x7fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x800000, 0x800000, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x800002, 0x800002, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x1398437, 0x1398437, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xba98d27, 0xba98d27, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xba98d7a, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x751f853a, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x7f800000, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x7f800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80002b94, 0x7f984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80002b94, 0x7fbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80002b94, 0x7fc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x7fffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x80000000, 0x0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x80000001, 0x0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x80000076, 0x0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x80002b94, 0x0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x80636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x807fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x80800000, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x80800002, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x81398437, 0x81398437, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xf51f853a, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xff7fffff, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xff800000, 0xff800000, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xff800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80002b94, 0xff984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80002b94, 0xffbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80002b94, 0xffc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xffd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xffffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xe73a5134, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x9503366, 0x9503366, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x966320b, 0x966320b, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xb26bddee, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0x80002b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x317285d3, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x80002b94, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x0, 0x0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x1, 0x0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x76, 0x0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x2b94, 0x0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x7fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x800000, 0x800000, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x800002, 0x800002, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x1398437, 0x1398437, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xba98d27, 0xba98d27, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xba98d7a, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x751f853a, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x7f800000, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x7f800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80636d24, 0x7f984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80636d24, 0x7fbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80636d24, 0x7fc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x7fffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x80000000, 0x0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x80000001, 0x0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x80000076, 0x0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x80002b94, 0x0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x80636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x807fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x80800000, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x80800002, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x81398437, 0x81398437, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xf51f853a, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xff7fffff, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xff800000, 0xff800000, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xff800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80636d24, 0xff984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80636d24, 0xffbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x80636d24, 0xffc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xffd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xffffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xe73a5134, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x9503366, 0x9503366, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x966320b, 0x966320b, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xb26bddee, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0x80636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x317285d3, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x80636d24, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x0, 0x0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x1, 0x0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x76, 0x0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x2b94, 0x0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x7fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x800000, 0x800000, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x800002, 0x800002, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x1398437, 0x1398437, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xba98d27, 0xba98d27, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xba98d7a, 0xba98d7a, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x751f853a, 0x751f853a, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x7f7fffff, 0x7f7fffff, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x7f800000, 0x7f800000, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x7f800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x807fffff, 0x7f984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x807fffff, 0x7fbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x807fffff, 0x7fc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x7fd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x7fffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x80000000, 0x0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x80000001, 0x0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x80000076, 0x0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x80002b94, 0x0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x80636d24, 0x0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x807fffff, 0x0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x80800000, 0x80800000, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x80800002, 0x80800002, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x81398437, 0x81398437, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x8ba98d27, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xf51f853a, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xff7ffff0, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xff7fffff, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xff800000, 0xff800000, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xff800001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x807fffff, 0xff984a37, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x807fffff, 0xffbfffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0x807fffff, 0xffc00000, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xffd9ba98, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xffffffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x4f3495cb, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xe73a5134, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x7c994e9e, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x6164bd6c, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x9503366, 0x9503366, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x77f31e2f, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x966320b, 0x966320b, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xb26bddee, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0x807fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x317285d3, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x3c9623b1, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x807fffff, 0x7b906a6c, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x80800000, 0x0, 0x80800000, 0x3c00000}, +{0x3c00000, 0x80800000, 0x1, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80800000, 0x76, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80800000, 0x2b94, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80800000, 0x636d24, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80800000, 0x7fffff, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80800000, 0x800000, 0x0, 0x3c00000}, +{0x3c00000, 0x80800000, 0x800002, 0x0, 0x3c00008}, +{0x3c00000, 0x80800000, 0x1398437, 0xf3086e, 0x3c00000}, +{0x3c00000, 0x80800000, 0xba98d27, 0xba98d25, 0x3c00000}, +{0x3c00000, 0x80800000, 0xba98d7a, 0xba98d78, 0x3c00000}, +{0x3c00000, 0x80800000, 0x751f853a, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x80800000, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x80800000, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x80800000, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x80800000, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80800000, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80800000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80800000, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80800000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80800000, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80800000, 0x80000000, 0x80800000, 0x3c00000}, +{0x3c00000, 0x80800000, 0x80000001, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80800000, 0x80000076, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80800000, 0x80002b94, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80800000, 0x80636d24, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80800000, 0x807fffff, 0x80800000, 0x3c00080}, +{0x3c00000, 0x80800000, 0x80800000, 0x81000000, 0x3c00000}, +{0x3c00000, 0x80800000, 0x80800002, 0x81000001, 0x3c00000}, +{0x3c00000, 0x80800000, 0x81398437, 0x81798437, 0x3c00000}, +{0x3c00000, 0x80800000, 0x8ba98d27, 0x8ba98d29, 0x3c00000}, +{0x3c00000, 0x80800000, 0x8ba98d7a, 0x8ba98d7c, 0x3c00000}, +{0x3c00000, 0x80800000, 0xf51f853a, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0x80800000, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0x80800000, 0xff7fffff, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0x80800000, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x80800000, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80800000, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80800000, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80800000, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80800000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80800000, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80800000, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x80800000, 0xe73a5134, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0x80800000, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x80800000, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x80800000, 0x9503366, 0x9503326, 0x3c00000}, +{0x3c00000, 0x80800000, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0x80800000, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0x80800000, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x80800000, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010}, +{0x3c00000, 0x80800000, 0x966320b, 0x96631cb, 0x3c00000}, +{0x3c00000, 0x80800000, 0xb26bddee, 0xb26bddee, 0x3c00010}, +{0x3c00000, 0x80800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010}, +{0x3c00000, 0x80800000, 0x317285d3, 0x317285d2, 0x3c00010}, +{0x3c00000, 0x80800000, 0x3c9623b1, 0x3c9623b0, 0x3c00010}, +{0x3c00000, 0x80800000, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x80800000, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x80800002, 0x0, 0x80800002, 0x3c00000}, +{0x3c00000, 0x80800002, 0x1, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80800002, 0x76, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80800002, 0x2b94, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80800002, 0x636d24, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80800002, 0x7fffff, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80800002, 0x800000, 0x0, 0x3c00008}, +{0x3c00000, 0x80800002, 0x800002, 0x0, 0x3c00000}, +{0x3c00000, 0x80800002, 0x1398437, 0xf3086c, 0x3c00000}, +{0x3c00000, 0x80800002, 0xba98d27, 0xba98d24, 0x3c00010}, +{0x3c00000, 0x80800002, 0xba98d7a, 0xba98d77, 0x3c00010}, +{0x3c00000, 0x80800002, 0x751f853a, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x80800002, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x80800002, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x80800002, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x80800002, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80800002, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80800002, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80800002, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80800002, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80800002, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80800002, 0x80000000, 0x80800002, 0x3c00000}, +{0x3c00000, 0x80800002, 0x80000001, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80800002, 0x80000076, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80800002, 0x80002b94, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80800002, 0x80636d24, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80800002, 0x807fffff, 0x80800002, 0x3c00080}, +{0x3c00000, 0x80800002, 0x80800000, 0x81000001, 0x3c00000}, +{0x3c00000, 0x80800002, 0x80800002, 0x81000002, 0x3c00000}, +{0x3c00000, 0x80800002, 0x81398437, 0x81798438, 0x3c00000}, +{0x3c00000, 0x80800002, 0x8ba98d27, 0x8ba98d29, 0x3c00010}, +{0x3c00000, 0x80800002, 0x8ba98d7a, 0x8ba98d7c, 0x3c00010}, +{0x3c00000, 0x80800002, 0xf51f853a, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0x80800002, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0x80800002, 0xff7fffff, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0x80800002, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x80800002, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80800002, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80800002, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x80800002, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80800002, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80800002, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x80800002, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x80800002, 0xe73a5134, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0x80800002, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x80800002, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x80800002, 0x9503366, 0x9503325, 0x3c00010}, +{0x3c00000, 0x80800002, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0x80800002, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0x80800002, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x80800002, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010}, +{0x3c00000, 0x80800002, 0x966320b, 0x96631ca, 0x3c00010}, +{0x3c00000, 0x80800002, 0xb26bddee, 0xb26bddee, 0x3c00010}, +{0x3c00000, 0x80800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010}, +{0x3c00000, 0x80800002, 0x317285d3, 0x317285d2, 0x3c00010}, +{0x3c00000, 0x80800002, 0x3c9623b1, 0x3c9623b0, 0x3c00010}, +{0x3c00000, 0x80800002, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x80800002, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x81398437, 0x0, 0x81398437, 0x3c00000}, +{0x3c00000, 0x81398437, 0x1, 0x81398437, 0x3c00080}, +{0x3c00000, 0x81398437, 0x76, 0x81398437, 0x3c00080}, +{0x3c00000, 0x81398437, 0x2b94, 0x81398437, 0x3c00080}, +{0x3c00000, 0x81398437, 0x636d24, 0x81398437, 0x3c00080}, +{0x3c00000, 0x81398437, 0x7fffff, 0x81398437, 0x3c00080}, +{0x3c00000, 0x81398437, 0x800000, 0x80f3086e, 0x3c00000}, +{0x3c00000, 0x81398437, 0x800002, 0x80f3086c, 0x3c00000}, +{0x3c00000, 0x81398437, 0x1398437, 0x0, 0x3c00000}, +{0x3c00000, 0x81398437, 0xba98d27, 0xba98d21, 0x3c00010}, +{0x3c00000, 0x81398437, 0xba98d7a, 0xba98d74, 0x3c00010}, +{0x3c00000, 0x81398437, 0x751f853a, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x81398437, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x81398437, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x81398437, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x81398437, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x81398437, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x81398437, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x81398437, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x81398437, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x81398437, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x81398437, 0x80000000, 0x81398437, 0x3c00000}, +{0x3c00000, 0x81398437, 0x80000001, 0x81398437, 0x3c00080}, +{0x3c00000, 0x81398437, 0x80000076, 0x81398437, 0x3c00080}, +{0x3c00000, 0x81398437, 0x80002b94, 0x81398437, 0x3c00080}, +{0x3c00000, 0x81398437, 0x80636d24, 0x81398437, 0x3c00080}, +{0x3c00000, 0x81398437, 0x807fffff, 0x81398437, 0x3c00080}, +{0x3c00000, 0x81398437, 0x80800000, 0x81798437, 0x3c00000}, +{0x3c00000, 0x81398437, 0x80800002, 0x81798438, 0x3c00000}, +{0x3c00000, 0x81398437, 0x81398437, 0x81b98437, 0x3c00000}, +{0x3c00000, 0x81398437, 0x8ba98d27, 0x8ba98d2c, 0x3c00010}, +{0x3c00000, 0x81398437, 0x8ba98d7a, 0x8ba98d7f, 0x3c00010}, +{0x3c00000, 0x81398437, 0xf51f853a, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0x81398437, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0x81398437, 0xff7fffff, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0x81398437, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x81398437, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x81398437, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x81398437, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x81398437, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x81398437, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x81398437, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x81398437, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x81398437, 0xe73a5134, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0x81398437, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x81398437, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x81398437, 0x9503366, 0x95032ac, 0x3c00010}, +{0x3c00000, 0x81398437, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0x81398437, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0x81398437, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x81398437, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010}, +{0x3c00000, 0x81398437, 0x966320b, 0x9663151, 0x3c00010}, +{0x3c00000, 0x81398437, 0xb26bddee, 0xb26bddee, 0x3c00010}, +{0x3c00000, 0x81398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010}, +{0x3c00000, 0x81398437, 0x317285d3, 0x317285d2, 0x3c00010}, +{0x3c00000, 0x81398437, 0x3c9623b1, 0x3c9623b0, 0x3c00010}, +{0x3c00000, 0x81398437, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x81398437, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x0, 0x8ba98d27, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0x1, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x8ba98d27, 0x76, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x8ba98d27, 0x2b94, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x8ba98d27, 0x636d24, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x8ba98d27, 0x7fffff, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x8ba98d27, 0x800000, 0x8ba98d25, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0x800002, 0x8ba98d24, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x1398437, 0x8ba98d21, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0xba98d27, 0x0, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0xba98d7a, 0x3260000, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0x751f853a, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x8ba98d27, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x8ba98d27, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x8ba98d27, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0x80000000, 0x8ba98d27, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0x80000001, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x8ba98d27, 0x80000076, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x8ba98d27, 0x80002b94, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x8ba98d27, 0x80636d24, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x8ba98d27, 0x807fffff, 0x8ba98d27, 0x3c00080}, +{0x3c00000, 0x8ba98d27, 0x80800000, 0x8ba98d29, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0x80800002, 0x8ba98d29, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x81398437, 0x8ba98d2c, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x8ba98d27, 0x8c298d27, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0x8ba98d7a, 0x8c298d50, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0xf51f853a, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0xff7fffff, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x8ba98d27, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x8ba98d27, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x8ba98d27, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x8ba98d27, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0xe73a5134, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x9503366, 0x8ba30b8b, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x966320b, 0x8ba25b96, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0xb26bddee, 0xb26bddee, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x317285d3, 0x317285d2, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x3c9623b1, 0x3c9623b0, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x8ba98d27, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x0, 0x8ba98d7a, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0x1, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x8ba98d7a, 0x76, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x8ba98d7a, 0x2b94, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x8ba98d7a, 0x636d24, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x8ba98d7a, 0x7fffff, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x8ba98d7a, 0x800000, 0x8ba98d78, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0x800002, 0x8ba98d77, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x1398437, 0x8ba98d74, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0xba98d27, 0x83260000, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0xba98d7a, 0x0, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0x751f853a, 0x751f8539, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x8ba98d7a, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x8ba98d7a, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x8ba98d7a, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0x80000000, 0x8ba98d7a, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0x80000001, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x8ba98d7a, 0x80000076, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x8ba98d7a, 0x80002b94, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x8ba98d7a, 0x80636d24, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x8ba98d7a, 0x807fffff, 0x8ba98d7a, 0x3c00080}, +{0x3c00000, 0x8ba98d7a, 0x80800000, 0x8ba98d7c, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0x80800002, 0x8ba98d7c, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x81398437, 0x8ba98d7f, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x8ba98d27, 0x8c298d50, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x8ba98d7a, 0x8c298d7a, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0xf51f853a, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0xff7fffff, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x8ba98d7a, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x8ba98d7a, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x8ba98d7a, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x8ba98d7a, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0xe73a5134, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x9503366, 0x8ba30bde, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x966320b, 0x8ba25be9, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0xb26bddee, 0xb26bddee, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x317285d3, 0x317285d2, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x3c9623b1, 0x3c9623b0, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x8ba98d7a, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x0, 0xf51f853a, 0x3c00000}, +{0x3c00000, 0xf51f853a, 0x1, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0xf51f853a, 0x76, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0xf51f853a, 0x2b94, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0xf51f853a, 0x636d24, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0xf51f853a, 0x7fffff, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0xf51f853a, 0x800000, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x800002, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x1398437, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0xba98d27, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0xba98d7a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x751f853a, 0x0, 0x3c00000}, +{0x3c00000, 0xf51f853a, 0x7f7ffff0, 0x7f7fffe6, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x7f7fffff, 0x7f7ffff5, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0xf51f853a, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xf51f853a, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xf51f853a, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xf51f853a, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xf51f853a, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xf51f853a, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xf51f853a, 0x80000000, 0xf51f853a, 0x3c00000}, +{0x3c00000, 0xf51f853a, 0x80000001, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0xf51f853a, 0x80000076, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0xf51f853a, 0x80002b94, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0xf51f853a, 0x80636d24, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0xf51f853a, 0x807fffff, 0xf51f853a, 0x3c00080}, +{0x3c00000, 0xf51f853a, 0x80800000, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x80800002, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x81398437, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x8ba98d27, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x8ba98d7a, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0xf51f853a, 0xf59f853a, 0x3c00000}, +{0x3c00000, 0xf51f853a, 0xff7ffff0, 0xff7ffff9, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0xff7fffff, 0xff7fffff, 0x3c00014}, +{0x3c00000, 0xf51f853a, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xf51f853a, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xf51f853a, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xf51f853a, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xf51f853a, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xf51f853a, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xf51f853a, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xf51f853a, 0x4f3495cb, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0xe73a5134, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x7c994e9e, 0x7c994d5e, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x6164bd6c, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x9503366, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0xbf5a97c9, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0xe6ff1a14, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x77f31e2f, 0x77ee2205, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0xaab4d7d8, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x966320b, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0xb26bddee, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0xb5c8e5d3, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x317285d3, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x3c9623b1, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x51fd2c7c, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0xf51f853a, 0x7b906a6c, 0x7b90656f, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x0, 0xff7ffff0, 0x3c00000}, +{0x3c00000, 0xff7ffff0, 0x1, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0xff7ffff0, 0x76, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0xff7ffff0, 0x2b94, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0xff7ffff0, 0x636d24, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0xff7ffff0, 0x7fffff, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0xff7ffff0, 0x800000, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x800002, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x1398437, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0xba98d27, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0xba98d7a, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x751f853a, 0xff7fffe6, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x7f7ffff0, 0x0, 0x3c00000}, +{0x3c00000, 0xff7ffff0, 0x7f7fffff, 0x75700000, 0x3c00000}, +{0x3c00000, 0xff7ffff0, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0xff7ffff0, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff7ffff0, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff7ffff0, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff7ffff0, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff7ffff0, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff7ffff0, 0x80000000, 0xff7ffff0, 0x3c00000}, +{0x3c00000, 0xff7ffff0, 0x80000001, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0xff7ffff0, 0x80000076, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0xff7ffff0, 0x80002b94, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0xff7ffff0, 0x80636d24, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0xff7ffff0, 0x807fffff, 0xff7ffff0, 0x3c00080}, +{0x3c00000, 0xff7ffff0, 0x80800000, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x80800002, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x81398437, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x8ba98d27, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x8ba98d7a, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0xf51f853a, 0xff7ffff9, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0xff7ffff0, 0xff7fffff, 0x3c00014}, +{0x3c00000, 0xff7ffff0, 0xff7fffff, 0xff7fffff, 0x3c00014}, +{0x3c00000, 0xff7ffff0, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff7ffff0, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff7ffff0, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff7ffff0, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff7ffff0, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff7ffff0, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff7ffff0, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff7ffff0, 0x4f3495cb, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0xe73a5134, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x7c994e9e, 0xff7b357b, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x6164bd6c, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x9503366, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0xbf5a97c9, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0xe6ff1a14, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x77f31e2f, 0xff7ffe09, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0xaab4d7d8, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x966320b, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0xb26bddee, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0xb5c8e5d3, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x317285d3, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x3c9623b1, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x51fd2c7c, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0xff7ffff0, 0x7b906a6c, 0xff7edf1b, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x0, 0xff7fffff, 0x3c00000}, +{0x3c00000, 0xff7fffff, 0x1, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0xff7fffff, 0x76, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0xff7fffff, 0x2b94, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0xff7fffff, 0x636d24, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0xff7fffff, 0x7fffff, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0xff7fffff, 0x800000, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x800002, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x1398437, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0xba98d27, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0xba98d7a, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x751f853a, 0xff7ffff5, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x7f7ffff0, 0xf5700000, 0x3c00000}, +{0x3c00000, 0xff7fffff, 0x7f7fffff, 0x0, 0x3c00000}, +{0x3c00000, 0xff7fffff, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0xff7fffff, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff7fffff, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff7fffff, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff7fffff, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff7fffff, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff7fffff, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff7fffff, 0x80000000, 0xff7fffff, 0x3c00000}, +{0x3c00000, 0xff7fffff, 0x80000001, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0xff7fffff, 0x80000076, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0xff7fffff, 0x80002b94, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0xff7fffff, 0x80636d24, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0xff7fffff, 0x807fffff, 0xff7fffff, 0x3c00080}, +{0x3c00000, 0xff7fffff, 0x80800000, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x80800002, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x81398437, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x8ba98d27, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x8ba98d7a, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0xf51f853a, 0xff7fffff, 0x3c00014}, +{0x3c00000, 0xff7fffff, 0xff7ffff0, 0xff7fffff, 0x3c00014}, +{0x3c00000, 0xff7fffff, 0xff7fffff, 0xff7fffff, 0x3c00014}, +{0x3c00000, 0xff7fffff, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff7fffff, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff7fffff, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff7fffff, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff7fffff, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff7fffff, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff7fffff, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff7fffff, 0x4f3495cb, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0xe73a5134, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x7c994e9e, 0xff7b358a, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x6164bd6c, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x9503366, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0xbf5a97c9, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0xe6ff1a14, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x77f31e2f, 0xff7ffe18, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0xaab4d7d8, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x966320b, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0xb26bddee, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0xb5c8e5d3, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x317285d3, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x3c9623b1, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x51fd2c7c, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0xff7fffff, 0x7b906a6c, 0xff7edf2a, 0x3c00010}, +{0x3c00000, 0xff800000, 0x0, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x1, 0xff800000, 0x3c00080}, +{0x3c00000, 0xff800000, 0x76, 0xff800000, 0x3c00080}, +{0x3c00000, 0xff800000, 0x2b94, 0xff800000, 0x3c00080}, +{0x3c00000, 0xff800000, 0x636d24, 0xff800000, 0x3c00080}, +{0x3c00000, 0xff800000, 0x7fffff, 0xff800000, 0x3c00080}, +{0x3c00000, 0xff800000, 0x800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x800002, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x1398437, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xba98d27, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xba98d7a, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x751f853a, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x7f7ffff0, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x7f7fffff, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x7f800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800000, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800000, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800000, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x80000000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x80000001, 0xff800000, 0x3c00080}, +{0x3c00000, 0xff800000, 0x80000076, 0xff800000, 0x3c00080}, +{0x3c00000, 0xff800000, 0x80002b94, 0xff800000, 0x3c00080}, +{0x3c00000, 0xff800000, 0x80636d24, 0xff800000, 0x3c00080}, +{0x3c00000, 0xff800000, 0x807fffff, 0xff800000, 0x3c00080}, +{0x3c00000, 0xff800000, 0x80800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x80800002, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x81398437, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x8ba98d27, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x8ba98d7a, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xf51f853a, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xff7ffff0, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xff7fffff, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800000, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800000, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800000, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x4f3495cb, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xe73a5134, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x7c994e9e, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x6164bd6c, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x9503366, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xbf5a97c9, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xe6ff1a14, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x77f31e2f, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xaab4d7d8, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x966320b, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xb26bddee, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0xb5c8e5d3, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x317285d3, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x3c9623b1, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x51fd2c7c, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800000, 0x7b906a6c, 0xff800000, 0x3c00000}, +{0x3c00000, 0xff800001, 0x0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x1, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff800001, 0x76, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff800001, 0x2b94, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff800001, 0x636d24, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff800001, 0x7fffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff800001, 0x800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x800002, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x1398437, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xba98d27, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xba98d7a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x751f853a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x7f7ffff0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x7f7fffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x7f800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x7fc00000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x7fd9ba98, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x7fffffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x80000000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x80000001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff800001, 0x80000076, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff800001, 0x80002b94, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff800001, 0x80636d24, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff800001, 0x807fffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff800001, 0x80800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x80800002, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x81398437, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x8ba98d27, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x8ba98d7a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xf51f853a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xff7ffff0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xff7fffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xff800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xffc00000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xffd9ba98, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xffffffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x4f3495cb, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xe73a5134, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x7c994e9e, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x6164bd6c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x9503366, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xbf5a97c9, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xe6ff1a14, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x77f31e2f, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xaab4d7d8, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x966320b, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xb26bddee, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0xb5c8e5d3, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x317285d3, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x3c9623b1, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x51fd2c7c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff800001, 0x7b906a6c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x1, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff984a37, 0x76, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff984a37, 0x2b94, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff984a37, 0x636d24, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff984a37, 0x7fffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff984a37, 0x800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x800002, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x1398437, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xba98d27, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xba98d7a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x751f853a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x7f7ffff0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x7f7fffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x7f800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x7fc00000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x7fd9ba98, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x7fffffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x80000000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x80000001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff984a37, 0x80000076, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff984a37, 0x80002b94, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff984a37, 0x80636d24, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff984a37, 0x807fffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xff984a37, 0x80800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x80800002, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x81398437, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x8ba98d27, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x8ba98d7a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xf51f853a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xff7ffff0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xff7fffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xff800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xffc00000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xffd9ba98, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xffffffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x4f3495cb, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xe73a5134, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x7c994e9e, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x6164bd6c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x9503366, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xbf5a97c9, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xe6ff1a14, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x77f31e2f, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xaab4d7d8, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x966320b, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xb26bddee, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0xb5c8e5d3, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x317285d3, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x3c9623b1, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x51fd2c7c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xff984a37, 0x7b906a6c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x1, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xffbfffff, 0x76, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xffbfffff, 0x2b94, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xffbfffff, 0x636d24, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xffbfffff, 0x7fffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xffbfffff, 0x800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x800002, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x1398437, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xba98d27, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xba98d7a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x751f853a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x7f7ffff0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x7f7fffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x7f800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x7fc00000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x7fd9ba98, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x7fffffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x80000000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x80000001, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xffbfffff, 0x80000076, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xffbfffff, 0x80002b94, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xffbfffff, 0x80636d24, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xffbfffff, 0x807fffff, 0x7fc00000, 0x3c00081}, +{0x3c00000, 0xffbfffff, 0x80800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x80800002, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x81398437, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x8ba98d27, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x8ba98d7a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xf51f853a, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xff7ffff0, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xff7fffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xff800000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xffc00000, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xffd9ba98, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xffffffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x4f3495cb, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xe73a5134, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x7c994e9e, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x6164bd6c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x9503366, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xbf5a97c9, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xe6ff1a14, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x77f31e2f, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xaab4d7d8, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x966320b, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xb26bddee, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x317285d3, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x3c9623b1, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x51fd2c7c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffbfffff, 0x7b906a6c, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffc00000, 0x0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x1, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffc00000, 0x76, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffc00000, 0x2b94, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffc00000, 0x636d24, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffc00000, 0x7fffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffc00000, 0x800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x800002, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x1398437, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xba98d27, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xba98d7a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x751f853a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x7f7ffff0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x7f7fffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x7f800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffc00000, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffc00000, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffc00000, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x80000000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x80000001, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffc00000, 0x80000076, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffc00000, 0x80002b94, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffc00000, 0x80636d24, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffc00000, 0x807fffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffc00000, 0x80800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x80800002, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x81398437, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x8ba98d27, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x8ba98d7a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xf51f853a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xff7ffff0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xff7fffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xff800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffc00000, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffc00000, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffc00000, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x4f3495cb, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xe73a5134, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x7c994e9e, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x6164bd6c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x9503366, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xbf5a97c9, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xe6ff1a14, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x77f31e2f, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xaab4d7d8, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x966320b, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xb26bddee, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0xb5c8e5d3, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x317285d3, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x3c9623b1, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x51fd2c7c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffc00000, 0x7b906a6c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x1, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffd9ba98, 0x76, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffd9ba98, 0x2b94, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffd9ba98, 0x636d24, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffd9ba98, 0x7fffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffd9ba98, 0x800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x800002, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x1398437, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xba98d27, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xba98d7a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x751f853a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x7f7fffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x7f800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffd9ba98, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffd9ba98, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffd9ba98, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x80000000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x80000001, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffd9ba98, 0x80000076, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffd9ba98, 0x80002b94, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffd9ba98, 0x80636d24, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffd9ba98, 0x807fffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffd9ba98, 0x80800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x80800002, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x81398437, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x8ba98d27, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xf51f853a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xff7ffff0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xff7fffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xff800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffd9ba98, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffd9ba98, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffd9ba98, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x4f3495cb, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xe73a5134, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x7c994e9e, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x6164bd6c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x9503366, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x77f31e2f, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x966320b, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xb26bddee, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x317285d3, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x3c9623b1, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffd9ba98, 0x7b906a6c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x1, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffffffff, 0x76, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffffffff, 0x2b94, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffffffff, 0x636d24, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffffffff, 0x7fffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffffffff, 0x800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x800002, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x1398437, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xba98d27, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xba98d7a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x751f853a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x7f7ffff0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x7f7fffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x7f800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffffffff, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffffffff, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffffffff, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x80000000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x80000001, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffffffff, 0x80000076, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffffffff, 0x80002b94, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffffffff, 0x80636d24, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffffffff, 0x807fffff, 0x7fc00000, 0x3c00080}, +{0x3c00000, 0xffffffff, 0x80800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x80800002, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x81398437, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x8ba98d27, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x8ba98d7a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xf51f853a, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xff7ffff0, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xff7fffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xff800000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffffffff, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffffffff, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xffffffff, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x4f3495cb, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xe73a5134, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x7c994e9e, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x6164bd6c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x9503366, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xbf5a97c9, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xe6ff1a14, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x77f31e2f, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xaab4d7d8, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x966320b, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xb26bddee, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0xb5c8e5d3, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x317285d3, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x3c9623b1, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x51fd2c7c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xffffffff, 0x7b906a6c, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x4f3495cb, 0x0, 0x4f3495cb, 0x3c00000}, +{0x3c00000, 0x4f3495cb, 0x1, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x4f3495cb, 0x76, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x4f3495cb, 0x2b94, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x4f3495cb, 0x636d24, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x4f3495cb, 0x7fffff, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x4f3495cb, 0x800000, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x800002, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x1398437, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0xba98d27, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0xba98d7a, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x751f853a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x4f3495cb, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x4f3495cb, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x4f3495cb, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x4f3495cb, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x4f3495cb, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x4f3495cb, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x4f3495cb, 0x80000000, 0x4f3495cb, 0x3c00000}, +{0x3c00000, 0x4f3495cb, 0x80000001, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x4f3495cb, 0x80000076, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x4f3495cb, 0x80002b94, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x4f3495cb, 0x80636d24, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x4f3495cb, 0x807fffff, 0x4f3495cb, 0x3c00080}, +{0x3c00000, 0x4f3495cb, 0x80800000, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x80800002, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x81398437, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x8ba98d27, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x8ba98d7a, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0xf51f853a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0xff7ffff0, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0xff7fffff, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x4f3495cb, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x4f3495cb, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x4f3495cb, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x4f3495cb, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x4f3495cb, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x4f3495cb, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x4f3495cb, 0x4f3495cb, 0x4fb495cb, 0x3c00000}, +{0x3c00000, 0x4f3495cb, 0xe73a5134, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x9503366, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0xbf5a97c9, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0xaab4d7d8, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x966320b, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0xb26bddee, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0xb5c8e5d3, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x317285d3, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x3c9623b1, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x51fd2c7c, 0x52016895, 0x3c00010}, +{0x3c00000, 0x4f3495cb, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x0, 0xe73a5134, 0x3c00000}, +{0x3c00000, 0xe73a5134, 0x1, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0xe73a5134, 0x76, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0xe73a5134, 0x2b94, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0xe73a5134, 0x636d24, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0xe73a5134, 0x7fffff, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0xe73a5134, 0x800000, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x800002, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x1398437, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0xba98d27, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0xba98d7a, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x751f853a, 0x751f8539, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0xe73a5134, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xe73a5134, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xe73a5134, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xe73a5134, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xe73a5134, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xe73a5134, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xe73a5134, 0x80000000, 0xe73a5134, 0x3c00000}, +{0x3c00000, 0xe73a5134, 0x80000001, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0xe73a5134, 0x80000076, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0xe73a5134, 0x80002b94, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0xe73a5134, 0x80636d24, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0xe73a5134, 0x807fffff, 0xe73a5134, 0x3c00080}, +{0x3c00000, 0xe73a5134, 0x80800000, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x80800002, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x81398437, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x8ba98d27, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x8ba98d7a, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0xf51f853a, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0xff7fffff, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xe73a5134, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xe73a5134, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xe73a5134, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xe73a5134, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xe73a5134, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xe73a5134, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xe73a5134, 0x4f3495cb, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0xe73a5134, 0xe7ba5134, 0x3c00000}, +{0x3c00000, 0xe73a5134, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x6164bd6c, 0xe73a42e8, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x9503366, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0xbf5a97c9, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0xe6ff1a14, 0xe79cef1f, 0x3c00000}, +{0x3c00000, 0xe73a5134, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0xaab4d7d8, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x966320b, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0xb26bddee, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0xb5c8e5d3, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x317285d3, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x3c9623b1, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x51fd2c7c, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0xe73a5134, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x0, 0x7c994e9e, 0x3c00000}, +{0x3c00000, 0x7c994e9e, 0x1, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x7c994e9e, 0x76, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x7c994e9e, 0x2b94, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x7c994e9e, 0x636d24, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x7c994e9e, 0x7fffff, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x7c994e9e, 0x800000, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x800002, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x1398437, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0xba98d27, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0xba98d7a, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x751f853a, 0x7c994fdd, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x7f7ffff0, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7c994e9e, 0x7f7fffff, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7c994e9e, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7c994e9e, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7c994e9e, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7c994e9e, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7c994e9e, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7c994e9e, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7c994e9e, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7c994e9e, 0x80000000, 0x7c994e9e, 0x3c00000}, +{0x3c00000, 0x7c994e9e, 0x80000001, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x7c994e9e, 0x80000076, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x7c994e9e, 0x80002b94, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x7c994e9e, 0x80636d24, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x7c994e9e, 0x807fffff, 0x7c994e9e, 0x3c00080}, +{0x3c00000, 0x7c994e9e, 0x80800000, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x80800002, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x81398437, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x8ba98d27, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x8ba98d7a, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0xf51f853a, 0x7c994d5e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0xff7ffff0, 0xff7b357b, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0xff7fffff, 0xff7b358a, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x7c994e9e, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7c994e9e, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7c994e9e, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7c994e9e, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7c994e9e, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7c994e9e, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7c994e9e, 0x4f3495cb, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0xe73a5134, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x7c994e9e, 0x7d194e9e, 0x3c00000}, +{0x3c00000, 0x7c994e9e, 0x6164bd6c, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x9503366, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0xbf5a97c9, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0xe6ff1a14, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x77f31e2f, 0x7c998b65, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0xaab4d7d8, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x966320b, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0xb26bddee, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0xb5c8e5d3, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x317285d3, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x3c9623b1, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x51fd2c7c, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x7c994e9e, 0x7b906a6c, 0x7cbd6939, 0x3c00000}, +{0x3c00000, 0x6164bd6c, 0x0, 0x6164bd6c, 0x3c00000}, +{0x3c00000, 0x6164bd6c, 0x1, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x6164bd6c, 0x76, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x6164bd6c, 0x2b94, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x6164bd6c, 0x636d24, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x6164bd6c, 0x7fffff, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x6164bd6c, 0x800000, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x800002, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x1398437, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0xba98d27, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0xba98d7a, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x751f853a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x6164bd6c, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x6164bd6c, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x6164bd6c, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x6164bd6c, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x6164bd6c, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x6164bd6c, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x6164bd6c, 0x80000000, 0x6164bd6c, 0x3c00000}, +{0x3c00000, 0x6164bd6c, 0x80000001, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x6164bd6c, 0x80000076, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x6164bd6c, 0x80002b94, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x6164bd6c, 0x80636d24, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x6164bd6c, 0x807fffff, 0x6164bd6c, 0x3c00080}, +{0x3c00000, 0x6164bd6c, 0x80800000, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x80800002, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x81398437, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x8ba98d27, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x8ba98d7a, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0xf51f853a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0xff7ffff0, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0xff7fffff, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x6164bd6c, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x6164bd6c, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x6164bd6c, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x6164bd6c, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x6164bd6c, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x6164bd6c, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x6164bd6c, 0x4f3495cb, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0xe73a5134, 0xe73a42e8, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x6164bd6c, 0x61e4bd6c, 0x3c00000}, +{0x3c00000, 0x6164bd6c, 0x9503366, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0xbf5a97c9, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0xe6ff1a14, 0xe6fefd7c, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0xaab4d7d8, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x966320b, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0xb26bddee, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0xb5c8e5d3, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x317285d3, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x3c9623b1, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x51fd2c7c, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x6164bd6c, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x9503366, 0x0, 0x9503366, 0x3c00000}, +{0x3c00000, 0x9503366, 0x1, 0x9503366, 0x3c00080}, +{0x3c00000, 0x9503366, 0x76, 0x9503366, 0x3c00080}, +{0x3c00000, 0x9503366, 0x2b94, 0x9503366, 0x3c00080}, +{0x3c00000, 0x9503366, 0x636d24, 0x9503366, 0x3c00080}, +{0x3c00000, 0x9503366, 0x7fffff, 0x9503366, 0x3c00080}, +{0x3c00000, 0x9503366, 0x800000, 0x95033a6, 0x3c00000}, +{0x3c00000, 0x9503366, 0x800002, 0x95033a6, 0x3c00010}, +{0x3c00000, 0x9503366, 0x1398437, 0x950341f, 0x3c00010}, +{0x3c00000, 0x9503366, 0xba98d27, 0xbb00ec2, 0x3c00010}, +{0x3c00000, 0x9503366, 0xba98d7a, 0xbb00f15, 0x3c00010}, +{0x3c00000, 0x9503366, 0x751f853a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x9503366, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x9503366, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x9503366, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x9503366, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x9503366, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x9503366, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x9503366, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x9503366, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x9503366, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x9503366, 0x80000000, 0x9503366, 0x3c00000}, +{0x3c00000, 0x9503366, 0x80000001, 0x9503366, 0x3c00080}, +{0x3c00000, 0x9503366, 0x80000076, 0x9503366, 0x3c00080}, +{0x3c00000, 0x9503366, 0x80002b94, 0x9503366, 0x3c00080}, +{0x3c00000, 0x9503366, 0x80636d24, 0x9503366, 0x3c00080}, +{0x3c00000, 0x9503366, 0x807fffff, 0x9503366, 0x3c00080}, +{0x3c00000, 0x9503366, 0x80800000, 0x9503326, 0x3c00000}, +{0x3c00000, 0x9503366, 0x80800002, 0x9503325, 0x3c00010}, +{0x3c00000, 0x9503366, 0x81398437, 0x95032ac, 0x3c00010}, +{0x3c00000, 0x9503366, 0x8ba98d27, 0x8ba30b8b, 0x3c00010}, +{0x3c00000, 0x9503366, 0x8ba98d7a, 0x8ba30bde, 0x3c00010}, +{0x3c00000, 0x9503366, 0xf51f853a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0x9503366, 0xff7ffff0, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0x9503366, 0xff7fffff, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0x9503366, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x9503366, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x9503366, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x9503366, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x9503366, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x9503366, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x9503366, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x9503366, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x9503366, 0xe73a5134, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0x9503366, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x9503366, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x9503366, 0x9503366, 0x9d03366, 0x3c00000}, +{0x3c00000, 0x9503366, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0x9503366, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0x9503366, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x9503366, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0x9503366, 0x966320b, 0x9db32b8, 0x3c00010}, +{0x3c00000, 0x9503366, 0xb26bddee, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0x9503366, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0x9503366, 0x317285d3, 0x317285d3, 0x3c00010}, +{0x3c00000, 0x9503366, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0x9503366, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x9503366, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x0, 0xbf5a97c9, 0x3c00000}, +{0x3c00000, 0xbf5a97c9, 0x1, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0xbf5a97c9, 0x76, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0xbf5a97c9, 0x2b94, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0xbf5a97c9, 0x636d24, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0xbf5a97c9, 0x7fffff, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0xbf5a97c9, 0x800000, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x800002, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x1398437, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0xba98d27, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0xba98d7a, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x751f853a, 0x751f8539, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0xbf5a97c9, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xbf5a97c9, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xbf5a97c9, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xbf5a97c9, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xbf5a97c9, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xbf5a97c9, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xbf5a97c9, 0x80000000, 0xbf5a97c9, 0x3c00000}, +{0x3c00000, 0xbf5a97c9, 0x80000001, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0xbf5a97c9, 0x80000076, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0xbf5a97c9, 0x80002b94, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0xbf5a97c9, 0x80636d24, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0xbf5a97c9, 0x807fffff, 0xbf5a97c9, 0x3c00080}, +{0x3c00000, 0xbf5a97c9, 0x80800000, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x80800002, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x81398437, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x8ba98d27, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x8ba98d7a, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0xf51f853a, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0xff7fffff, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xbf5a97c9, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xbf5a97c9, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xbf5a97c9, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xbf5a97c9, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xbf5a97c9, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xbf5a97c9, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xbf5a97c9, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0xe73a5134, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x9503366, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0xbf5a97c9, 0xbfda97c9, 0x3c00000}, +{0x3c00000, 0xbf5a97c9, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0xaab4d7d8, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x966320b, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0xb26bddee, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0xb5c8e5d3, 0xbf5a97e2, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x317285d3, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x3c9623b1, 0xbf55e6ab, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0xbf5a97c9, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x0, 0xe6ff1a14, 0x3c00000}, +{0x3c00000, 0xe6ff1a14, 0x1, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0xe6ff1a14, 0x76, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0xe6ff1a14, 0x2b94, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0xe6ff1a14, 0x636d24, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0xe6ff1a14, 0x7fffff, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0xe6ff1a14, 0x800000, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x800002, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x1398437, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0xba98d27, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0xba98d7a, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x751f853a, 0x751f8539, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0xe6ff1a14, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xe6ff1a14, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xe6ff1a14, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xe6ff1a14, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xe6ff1a14, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xe6ff1a14, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xe6ff1a14, 0x80000000, 0xe6ff1a14, 0x3c00000}, +{0x3c00000, 0xe6ff1a14, 0x80000001, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0xe6ff1a14, 0x80000076, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0xe6ff1a14, 0x80002b94, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0xe6ff1a14, 0x80636d24, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0xe6ff1a14, 0x807fffff, 0xe6ff1a14, 0x3c00080}, +{0x3c00000, 0xe6ff1a14, 0x80800000, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x80800002, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x81398437, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x8ba98d27, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x8ba98d7a, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0xf51f853a, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0xff7fffff, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xe6ff1a14, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xe6ff1a14, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xe6ff1a14, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xe6ff1a14, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xe6ff1a14, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xe6ff1a14, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xe6ff1a14, 0x4f3495cb, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0xe73a5134, 0xe79cef1f, 0x3c00000}, +{0x3c00000, 0xe6ff1a14, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x6164bd6c, 0xe6fefd7c, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x9503366, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0xbf5a97c9, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0xe6ff1a14, 0xe77f1a14, 0x3c00000}, +{0x3c00000, 0xe6ff1a14, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0xaab4d7d8, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x966320b, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0xb26bddee, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0xb5c8e5d3, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x317285d3, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x3c9623b1, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x51fd2c7c, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0xe6ff1a14, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x0, 0x77f31e2f, 0x3c00000}, +{0x3c00000, 0x77f31e2f, 0x1, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x77f31e2f, 0x76, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x77f31e2f, 0x2b94, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x77f31e2f, 0x636d24, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x77f31e2f, 0x7fffff, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x77f31e2f, 0x800000, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x800002, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x1398437, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0xba98d27, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0xba98d7a, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x751f853a, 0x77f81a58, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x7f7ffff0, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x77f31e2f, 0x7f7fffff, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x77f31e2f, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x77f31e2f, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x77f31e2f, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x77f31e2f, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x77f31e2f, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x77f31e2f, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x77f31e2f, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x77f31e2f, 0x80000000, 0x77f31e2f, 0x3c00000}, +{0x3c00000, 0x77f31e2f, 0x80000001, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x77f31e2f, 0x80000076, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x77f31e2f, 0x80002b94, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x77f31e2f, 0x80636d24, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x77f31e2f, 0x807fffff, 0x77f31e2f, 0x3c00080}, +{0x3c00000, 0x77f31e2f, 0x80800000, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x80800002, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x81398437, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x8ba98d27, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x8ba98d7a, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0xf51f853a, 0x77ee2205, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0xff7ffff0, 0xff7ffe09, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0xff7fffff, 0xff7ffe18, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x77f31e2f, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x77f31e2f, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x77f31e2f, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x77f31e2f, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x77f31e2f, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x77f31e2f, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x77f31e2f, 0x4f3495cb, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0xe73a5134, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x7c994e9e, 0x7c998b65, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x6164bd6c, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x9503366, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0xbf5a97c9, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0xe6ff1a14, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x77f31e2f, 0x78731e2f, 0x3c00000}, +{0x3c00000, 0x77f31e2f, 0xaab4d7d8, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x966320b, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0xb26bddee, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0xb5c8e5d3, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x317285d3, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x3c9623b1, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x51fd2c7c, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x77f31e2f, 0x7b906a6c, 0x7b915d8a, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x0, 0xaab4d7d8, 0x3c00000}, +{0x3c00000, 0xaab4d7d8, 0x1, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0xaab4d7d8, 0x76, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0xaab4d7d8, 0x2b94, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0xaab4d7d8, 0x636d24, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0xaab4d7d8, 0x7fffff, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0xaab4d7d8, 0x800000, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x800002, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x1398437, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0xba98d27, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0xba98d7a, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x751f853a, 0x751f8539, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0xaab4d7d8, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xaab4d7d8, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xaab4d7d8, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xaab4d7d8, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xaab4d7d8, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xaab4d7d8, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xaab4d7d8, 0x80000000, 0xaab4d7d8, 0x3c00000}, +{0x3c00000, 0xaab4d7d8, 0x80000001, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0xaab4d7d8, 0x80000076, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0xaab4d7d8, 0x80002b94, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0xaab4d7d8, 0x80636d24, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0xaab4d7d8, 0x807fffff, 0xaab4d7d8, 0x3c00080}, +{0x3c00000, 0xaab4d7d8, 0x80800000, 0xaab4d7d8, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x80800002, 0xaab4d7d8, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x81398437, 0xaab4d7d8, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x8ba98d27, 0xaab4d7d8, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x8ba98d7a, 0xaab4d7d8, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0xf51f853a, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0xff7fffff, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xaab4d7d8, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xaab4d7d8, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xaab4d7d8, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xaab4d7d8, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xaab4d7d8, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xaab4d7d8, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xaab4d7d8, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0xe73a5134, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x9503366, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0xaab4d7d8, 0xab34d7d8, 0x3c00000}, +{0x3c00000, 0xaab4d7d8, 0x966320b, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0xb26bddee, 0xb26bdf57, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0xb5c8e5d3, 0xb5c8e5d5, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x317285d3, 0x3172802c, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x3c9623b1, 0x3c9623b0, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0xaab4d7d8, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x966320b, 0x0, 0x966320b, 0x3c00000}, +{0x3c00000, 0x966320b, 0x1, 0x966320b, 0x3c00080}, +{0x3c00000, 0x966320b, 0x76, 0x966320b, 0x3c00080}, +{0x3c00000, 0x966320b, 0x2b94, 0x966320b, 0x3c00080}, +{0x3c00000, 0x966320b, 0x636d24, 0x966320b, 0x3c00080}, +{0x3c00000, 0x966320b, 0x7fffff, 0x966320b, 0x3c00080}, +{0x3c00000, 0x966320b, 0x800000, 0x966324b, 0x3c00000}, +{0x3c00000, 0x966320b, 0x800002, 0x966324b, 0x3c00010}, +{0x3c00000, 0x966320b, 0x1398437, 0x96632c4, 0x3c00010}, +{0x3c00000, 0x966320b, 0xba98d27, 0xbb0beb7, 0x3c00010}, +{0x3c00000, 0x966320b, 0xba98d7a, 0xbb0bf0a, 0x3c00010}, +{0x3c00000, 0x966320b, 0x751f853a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x966320b, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x966320b, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x966320b, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x966320b, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x966320b, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x966320b, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x966320b, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x966320b, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x966320b, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x966320b, 0x80000000, 0x966320b, 0x3c00000}, +{0x3c00000, 0x966320b, 0x80000001, 0x966320b, 0x3c00080}, +{0x3c00000, 0x966320b, 0x80000076, 0x966320b, 0x3c00080}, +{0x3c00000, 0x966320b, 0x80002b94, 0x966320b, 0x3c00080}, +{0x3c00000, 0x966320b, 0x80636d24, 0x966320b, 0x3c00080}, +{0x3c00000, 0x966320b, 0x807fffff, 0x966320b, 0x3c00080}, +{0x3c00000, 0x966320b, 0x80800000, 0x96631cb, 0x3c00000}, +{0x3c00000, 0x966320b, 0x80800002, 0x96631ca, 0x3c00010}, +{0x3c00000, 0x966320b, 0x81398437, 0x9663151, 0x3c00010}, +{0x3c00000, 0x966320b, 0x8ba98d27, 0x8ba25b96, 0x3c00010}, +{0x3c00000, 0x966320b, 0x8ba98d7a, 0x8ba25be9, 0x3c00010}, +{0x3c00000, 0x966320b, 0xf51f853a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0x966320b, 0xff7ffff0, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0x966320b, 0xff7fffff, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0x966320b, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x966320b, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x966320b, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x966320b, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x966320b, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x966320b, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x966320b, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x966320b, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x966320b, 0xe73a5134, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0x966320b, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x966320b, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x966320b, 0x9503366, 0x9db32b8, 0x3c00010}, +{0x3c00000, 0x966320b, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0x966320b, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0x966320b, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x966320b, 0xaab4d7d8, 0xaab4d7d7, 0x3c00010}, +{0x3c00000, 0x966320b, 0x966320b, 0x9e6320b, 0x3c00000}, +{0x3c00000, 0x966320b, 0xb26bddee, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0x966320b, 0xb5c8e5d3, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0x966320b, 0x317285d3, 0x317285d3, 0x3c00010}, +{0x3c00000, 0x966320b, 0x3c9623b1, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0x966320b, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x966320b, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x0, 0xb26bddee, 0x3c00000}, +{0x3c00000, 0xb26bddee, 0x1, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0xb26bddee, 0x76, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0xb26bddee, 0x2b94, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0xb26bddee, 0x636d24, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0xb26bddee, 0x7fffff, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0xb26bddee, 0x800000, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x800002, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x1398437, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0xba98d27, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0xba98d7a, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x751f853a, 0x751f8539, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0xb26bddee, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xb26bddee, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xb26bddee, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xb26bddee, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xb26bddee, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xb26bddee, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xb26bddee, 0x80000000, 0xb26bddee, 0x3c00000}, +{0x3c00000, 0xb26bddee, 0x80000001, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0xb26bddee, 0x80000076, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0xb26bddee, 0x80002b94, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0xb26bddee, 0x80636d24, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0xb26bddee, 0x807fffff, 0xb26bddee, 0x3c00080}, +{0x3c00000, 0xb26bddee, 0x80800000, 0xb26bddee, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x80800002, 0xb26bddee, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x81398437, 0xb26bddee, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x8ba98d27, 0xb26bddee, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x8ba98d7a, 0xb26bddee, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0xf51f853a, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0xff7fffff, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xb26bddee, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xb26bddee, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xb26bddee, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xb26bddee, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xb26bddee, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xb26bddee, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xb26bddee, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0xe73a5134, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x9503366, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0xbf5a97c9, 0xbf5a97c9, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0xaab4d7d8, 0xb26bdf57, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x966320b, 0xb26bdded, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0xb26bddee, 0xb2ebddee, 0x3c00000}, +{0x3c00000, 0xb26bddee, 0xb5c8e5d3, 0xb5cabd8e, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x317285d3, 0xb22f3c79, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x3c9623b1, 0x3c9623a9, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0xb26bddee, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x0, 0xb5c8e5d3, 0x3c00000}, +{0x3c00000, 0xb5c8e5d3, 0x1, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0xb5c8e5d3, 0x76, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0xb5c8e5d3, 0x2b94, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0xb5c8e5d3, 0x636d24, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0xb5c8e5d3, 0x7fffff, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0xb5c8e5d3, 0x800000, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x800002, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x1398437, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0xba98d27, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0xba98d7a, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x751f853a, 0x751f8539, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x7f7ffff0, 0x7f7fffef, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x7f7fffff, 0x7f7ffffe, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0xb5c8e5d3, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xb5c8e5d3, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xb5c8e5d3, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xb5c8e5d3, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xb5c8e5d3, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xb5c8e5d3, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xb5c8e5d3, 0x80000000, 0xb5c8e5d3, 0x3c00000}, +{0x3c00000, 0xb5c8e5d3, 0x80000001, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0xb5c8e5d3, 0x80000076, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0xb5c8e5d3, 0x80002b94, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0xb5c8e5d3, 0x80636d24, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0xb5c8e5d3, 0x807fffff, 0xb5c8e5d3, 0x3c00080}, +{0x3c00000, 0xb5c8e5d3, 0x80800000, 0xb5c8e5d3, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x80800002, 0xb5c8e5d3, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x81398437, 0xb5c8e5d3, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x8ba98d27, 0xb5c8e5d3, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x8ba98d7a, 0xb5c8e5d3, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0xf51f853a, 0xf51f853a, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0xff7ffff0, 0xff7ffff0, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0xff7fffff, 0xff7fffff, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0xb5c8e5d3, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xb5c8e5d3, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xb5c8e5d3, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0xb5c8e5d3, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xb5c8e5d3, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xb5c8e5d3, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0xb5c8e5d3, 0x4f3495cb, 0x4f3495ca, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0xe73a5134, 0xe73a5134, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x7c994e9e, 0x7c994e9d, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x6164bd6c, 0x6164bd6b, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x9503366, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0xbf5a97c9, 0xbf5a97e2, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0xe6ff1a14, 0xe6ff1a14, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x77f31e2f, 0x77f31e2e, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0xaab4d7d8, 0xb5c8e5d5, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x966320b, 0xb5c8e5d2, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0xb26bddee, 0xb5cabd8e, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0xb5c8e5d3, 0xb648e5d3, 0x3c00000}, +{0x3c00000, 0xb5c8e5d3, 0x317285d3, 0xb5c86c90, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x3c9623b1, 0x3c96208d, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x51fd2c7c, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0xb5c8e5d3, 0x7b906a6c, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x0, 0x317285d3, 0x3c00000}, +{0x3c00000, 0x317285d3, 0x1, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x317285d3, 0x76, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x317285d3, 0x2b94, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x317285d3, 0x636d24, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x317285d3, 0x7fffff, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x317285d3, 0x800000, 0x317285d3, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x800002, 0x317285d3, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x1398437, 0x317285d3, 0x3c00010}, +{0x3c00000, 0x317285d3, 0xba98d27, 0x317285d3, 0x3c00010}, +{0x3c00000, 0x317285d3, 0xba98d7a, 0x317285d3, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x751f853a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x317285d3, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x317285d3, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x317285d3, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x317285d3, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x317285d3, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x317285d3, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x317285d3, 0x80000000, 0x317285d3, 0x3c00000}, +{0x3c00000, 0x317285d3, 0x80000001, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x317285d3, 0x80000076, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x317285d3, 0x80002b94, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x317285d3, 0x80636d24, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x317285d3, 0x807fffff, 0x317285d3, 0x3c00080}, +{0x3c00000, 0x317285d3, 0x80800000, 0x317285d2, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x80800002, 0x317285d2, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x81398437, 0x317285d2, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x8ba98d27, 0x317285d2, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x8ba98d7a, 0x317285d2, 0x3c00010}, +{0x3c00000, 0x317285d3, 0xf51f853a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0x317285d3, 0xff7ffff0, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0x317285d3, 0xff7fffff, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0x317285d3, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x317285d3, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x317285d3, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x317285d3, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x317285d3, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x317285d3, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x317285d3, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x317285d3, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x317285d3, 0xe73a5134, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x9503366, 0x317285d3, 0x3c00010}, +{0x3c00000, 0x317285d3, 0xbf5a97c9, 0xbf5a97c8, 0x3c00010}, +{0x3c00000, 0x317285d3, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x317285d3, 0xaab4d7d8, 0x3172802c, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x966320b, 0x317285d3, 0x3c00010}, +{0x3c00000, 0x317285d3, 0xb26bddee, 0xb22f3c79, 0x3c00010}, +{0x3c00000, 0x317285d3, 0xb5c8e5d3, 0xb5c86c90, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x317285d3, 0x31f285d3, 0x3c00000}, +{0x3c00000, 0x317285d3, 0x3c9623b1, 0x3c9623b2, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x317285d3, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x0, 0x3c9623b1, 0x3c00000}, +{0x3c00000, 0x3c9623b1, 0x1, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x3c9623b1, 0x76, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x3c9623b1, 0x2b94, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x3c9623b1, 0x636d24, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x3c9623b1, 0x7fffff, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x3c9623b1, 0x800000, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x800002, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x1398437, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0xba98d27, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0xba98d7a, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x751f853a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x3c9623b1, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x3c9623b1, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x3c9623b1, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x3c9623b1, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x3c9623b1, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x3c9623b1, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x3c9623b1, 0x80000000, 0x3c9623b1, 0x3c00000}, +{0x3c00000, 0x3c9623b1, 0x80000001, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x3c9623b1, 0x80000076, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x3c9623b1, 0x80002b94, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x3c9623b1, 0x80636d24, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x3c9623b1, 0x807fffff, 0x3c9623b1, 0x3c00080}, +{0x3c00000, 0x3c9623b1, 0x80800000, 0x3c9623b0, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x80800002, 0x3c9623b0, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x81398437, 0x3c9623b0, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x8ba98d27, 0x3c9623b0, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x8ba98d7a, 0x3c9623b0, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0xf51f853a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0xff7ffff0, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0xff7fffff, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x3c9623b1, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x3c9623b1, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x3c9623b1, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x3c9623b1, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x3c9623b1, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x3c9623b1, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x3c9623b1, 0x4f3495cb, 0x4f3495cb, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0xe73a5134, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x9503366, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0xbf5a97c9, 0xbf55e6ab, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0xaab4d7d8, 0x3c9623b0, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x966320b, 0x3c9623b1, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0xb26bddee, 0x3c9623a9, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0xb5c8e5d3, 0x3c96208d, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x317285d3, 0x3c9623b2, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x3c9623b1, 0x3d1623b1, 0x3c00000}, +{0x3c00000, 0x3c9623b1, 0x51fd2c7c, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x3c9623b1, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x0, 0x51fd2c7c, 0x3c00000}, +{0x3c00000, 0x51fd2c7c, 0x1, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x51fd2c7c, 0x76, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x51fd2c7c, 0x2b94, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x51fd2c7c, 0x636d24, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x51fd2c7c, 0x7fffff, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x51fd2c7c, 0x800000, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x800002, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x1398437, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0xba98d27, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0xba98d7a, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x751f853a, 0x751f853a, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x7f7ffff0, 0x7f7ffff0, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x7f7fffff, 0x7f7fffff, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x51fd2c7c, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x51fd2c7c, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x51fd2c7c, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x51fd2c7c, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x51fd2c7c, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x51fd2c7c, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x51fd2c7c, 0x80000000, 0x51fd2c7c, 0x3c00000}, +{0x3c00000, 0x51fd2c7c, 0x80000001, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x51fd2c7c, 0x80000076, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x51fd2c7c, 0x80002b94, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x51fd2c7c, 0x80636d24, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x51fd2c7c, 0x807fffff, 0x51fd2c7c, 0x3c00080}, +{0x3c00000, 0x51fd2c7c, 0x80800000, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x80800002, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x81398437, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x8ba98d27, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x8ba98d7a, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0xf51f853a, 0xf51f8539, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0xff7ffff0, 0xff7fffef, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0xff7fffff, 0xff7ffffe, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x51fd2c7c, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x51fd2c7c, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x51fd2c7c, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x51fd2c7c, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x51fd2c7c, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x51fd2c7c, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x51fd2c7c, 0x4f3495cb, 0x52016895, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0xe73a5134, 0xe73a5133, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x7c994e9e, 0x7c994e9e, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x6164bd6c, 0x6164bd6c, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x9503366, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0xbf5a97c9, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0xe6ff1a14, 0xe6ff1a13, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x77f31e2f, 0x77f31e2f, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0xaab4d7d8, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x966320b, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0xb26bddee, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0xb5c8e5d3, 0x51fd2c7b, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x317285d3, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x3c9623b1, 0x51fd2c7c, 0x3c00010}, +{0x3c00000, 0x51fd2c7c, 0x51fd2c7c, 0x527d2c7c, 0x3c00000}, +{0x3c00000, 0x51fd2c7c, 0x7b906a6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x0, 0x7b906a6c, 0x3c00000}, +{0x3c00000, 0x7b906a6c, 0x1, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x7b906a6c, 0x76, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x7b906a6c, 0x2b94, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x7b906a6c, 0x636d24, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x7b906a6c, 0x7fffff, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x7b906a6c, 0x800000, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x800002, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x1398437, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0xba98d27, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0xba98d7a, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x751f853a, 0x7b906f68, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x7f7ffff0, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7b906a6c, 0x7f7fffff, 0x7f7fffff, 0x3c00014}, +{0x3c00000, 0x7b906a6c, 0x7f800000, 0x7f800000, 0x3c00000}, +{0x3c00000, 0x7b906a6c, 0x7f800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7b906a6c, 0x7f984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7b906a6c, 0x7fbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7b906a6c, 0x7fc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7b906a6c, 0x7fd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7b906a6c, 0x7fffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7b906a6c, 0x80000000, 0x7b906a6c, 0x3c00000}, +{0x3c00000, 0x7b906a6c, 0x80000001, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x7b906a6c, 0x80000076, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x7b906a6c, 0x80002b94, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x7b906a6c, 0x80636d24, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x7b906a6c, 0x807fffff, 0x7b906a6c, 0x3c00080}, +{0x3c00000, 0x7b906a6c, 0x80800000, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x80800002, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x81398437, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x8ba98d27, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x8ba98d7a, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0xf51f853a, 0x7b90656f, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0xff7ffff0, 0xff7edf1b, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0xff7fffff, 0xff7edf2a, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0xff800000, 0xff800000, 0x3c00000}, +{0x3c00000, 0x7b906a6c, 0xff800001, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7b906a6c, 0xff984a37, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7b906a6c, 0xffbfffff, 0x7fc00000, 0x3c00001}, +{0x3c00000, 0x7b906a6c, 0xffc00000, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7b906a6c, 0xffd9ba98, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7b906a6c, 0xffffffff, 0x7fc00000, 0x3c00000}, +{0x3c00000, 0x7b906a6c, 0x4f3495cb, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0xe73a5134, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x7c994e9e, 0x7cbd6939, 0x3c00000}, +{0x3c00000, 0x7b906a6c, 0x6164bd6c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x9503366, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0xbf5a97c9, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0xe6ff1a14, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x77f31e2f, 0x7b915d8a, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0xaab4d7d8, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x966320b, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0xb26bddee, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0xb5c8e5d3, 0x7b906a6b, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x317285d3, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x3c9623b1, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x51fd2c7c, 0x7b906a6c, 0x3c00010}, +{0x3c00000, 0x7b906a6c, 0x7b906a6c, 0x7c106a6c, 0x3c00000}, +{0x3800000, 0x0, 0x0, 0x0, 0x3800000}, +{0x3800000, 0x0, 0x1, 0x0, 0x3800080}, +{0x3800000, 0x0, 0x76, 0x0, 0x3800080}, +{0x3800000, 0x0, 0x2b94, 0x0, 0x3800080}, +{0x3800000, 0x0, 0x636d24, 0x0, 0x3800080}, +{0x3800000, 0x0, 0x7fffff, 0x0, 0x3800080}, +{0x3800000, 0x0, 0x800000, 0x800000, 0x3800000}, +{0x3800000, 0x0, 0x800002, 0x800002, 0x3800000}, +{0x3800000, 0x0, 0x1398437, 0x1398437, 0x3800000}, +{0x3800000, 0x0, 0xba98d27, 0xba98d27, 0x3800000}, +{0x3800000, 0x0, 0xba98d7a, 0xba98d7a, 0x3800000}, +{0x3800000, 0x0, 0x751f853a, 0x751f853a, 0x3800000}, +{0x3800000, 0x0, 0x7f7ffff0, 0x7f7ffff0, 0x3800000}, +{0x3800000, 0x0, 0x7f7fffff, 0x7f7fffff, 0x3800000}, +{0x3800000, 0x0, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x0, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x0, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x0, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x0, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x0, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x0, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x0, 0x80000000, 0x80000000, 0x3800000}, +{0x3800000, 0x0, 0x80000001, 0x0, 0x3800080}, +{0x3800000, 0x0, 0x80000076, 0x0, 0x3800080}, +{0x3800000, 0x0, 0x80002b94, 0x0, 0x3800080}, +{0x3800000, 0x0, 0x80636d24, 0x0, 0x3800080}, +{0x3800000, 0x0, 0x807fffff, 0x0, 0x3800080}, +{0x3800000, 0x0, 0x80800000, 0x80800000, 0x3800000}, +{0x3800000, 0x0, 0x80800002, 0x80800002, 0x3800000}, +{0x3800000, 0x0, 0x81398437, 0x81398437, 0x3800000}, +{0x3800000, 0x0, 0x8ba98d27, 0x8ba98d27, 0x3800000}, +{0x3800000, 0x0, 0x8ba98d7a, 0x8ba98d7a, 0x3800000}, +{0x3800000, 0x0, 0xf51f853a, 0xf51f853a, 0x3800000}, +{0x3800000, 0x0, 0xff7ffff0, 0xff7ffff0, 0x3800000}, +{0x3800000, 0x0, 0xff7fffff, 0xff7fffff, 0x3800000}, +{0x3800000, 0x0, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x0, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x0, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x0, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x0, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x0, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x0, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x0, 0x4f3495cb, 0x4f3495cb, 0x3800000}, +{0x3800000, 0x0, 0xe73a5134, 0xe73a5134, 0x3800000}, +{0x3800000, 0x0, 0x7c994e9e, 0x7c994e9e, 0x3800000}, +{0x3800000, 0x0, 0x6164bd6c, 0x6164bd6c, 0x3800000}, +{0x3800000, 0x0, 0x9503366, 0x9503366, 0x3800000}, +{0x3800000, 0x0, 0xbf5a97c9, 0xbf5a97c9, 0x3800000}, +{0x3800000, 0x0, 0xe6ff1a14, 0xe6ff1a14, 0x3800000}, +{0x3800000, 0x0, 0x77f31e2f, 0x77f31e2f, 0x3800000}, +{0x3800000, 0x0, 0xaab4d7d8, 0xaab4d7d8, 0x3800000}, +{0x3800000, 0x0, 0x966320b, 0x966320b, 0x3800000}, +{0x3800000, 0x0, 0xb26bddee, 0xb26bddee, 0x3800000}, +{0x3800000, 0x0, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800000}, +{0x3800000, 0x0, 0x317285d3, 0x317285d3, 0x3800000}, +{0x3800000, 0x0, 0x3c9623b1, 0x3c9623b1, 0x3800000}, +{0x3800000, 0x0, 0x51fd2c7c, 0x51fd2c7c, 0x3800000}, +{0x3800000, 0x0, 0x7b906a6c, 0x7b906a6c, 0x3800000}, +{0x3800000, 0x1, 0x0, 0x0, 0x3800080}, +{0x3800000, 0x1, 0x1, 0x0, 0x3800080}, +{0x3800000, 0x1, 0x76, 0x0, 0x3800080}, +{0x3800000, 0x1, 0x2b94, 0x0, 0x3800080}, +{0x3800000, 0x1, 0x636d24, 0x0, 0x3800080}, +{0x3800000, 0x1, 0x7fffff, 0x0, 0x3800080}, +{0x3800000, 0x1, 0x800000, 0x800000, 0x3800080}, +{0x3800000, 0x1, 0x800002, 0x800002, 0x3800080}, +{0x3800000, 0x1, 0x1398437, 0x1398437, 0x3800080}, +{0x3800000, 0x1, 0xba98d27, 0xba98d27, 0x3800080}, +{0x3800000, 0x1, 0xba98d7a, 0xba98d7a, 0x3800080}, +{0x3800000, 0x1, 0x751f853a, 0x751f853a, 0x3800080}, +{0x3800000, 0x1, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x1, 0x7f7fffff, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x1, 0x7f800000, 0x7f800000, 0x3800080}, +{0x3800000, 0x1, 0x7f800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x1, 0x7f984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x1, 0x7fbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x1, 0x7fc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x1, 0x7fd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x1, 0x7fffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x1, 0x80000000, 0x80000000, 0x3800080}, +{0x3800000, 0x1, 0x80000001, 0x0, 0x3800080}, +{0x3800000, 0x1, 0x80000076, 0x0, 0x3800080}, +{0x3800000, 0x1, 0x80002b94, 0x0, 0x3800080}, +{0x3800000, 0x1, 0x80636d24, 0x0, 0x3800080}, +{0x3800000, 0x1, 0x807fffff, 0x0, 0x3800080}, +{0x3800000, 0x1, 0x80800000, 0x80800000, 0x3800080}, +{0x3800000, 0x1, 0x80800002, 0x80800002, 0x3800080}, +{0x3800000, 0x1, 0x81398437, 0x81398437, 0x3800080}, +{0x3800000, 0x1, 0x8ba98d27, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x1, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x1, 0xf51f853a, 0xf51f853a, 0x3800080}, +{0x3800000, 0x1, 0xff7ffff0, 0xff7ffff0, 0x3800080}, +{0x3800000, 0x1, 0xff7fffff, 0xff7fffff, 0x3800080}, +{0x3800000, 0x1, 0xff800000, 0xff800000, 0x3800080}, +{0x3800000, 0x1, 0xff800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x1, 0xff984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x1, 0xffbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x1, 0xffc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x1, 0xffd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x1, 0xffffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x1, 0x4f3495cb, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x1, 0xe73a5134, 0xe73a5134, 0x3800080}, +{0x3800000, 0x1, 0x7c994e9e, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x1, 0x6164bd6c, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x1, 0x9503366, 0x9503366, 0x3800080}, +{0x3800000, 0x1, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0x1, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0x1, 0x77f31e2f, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x1, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0x1, 0x966320b, 0x966320b, 0x3800080}, +{0x3800000, 0x1, 0xb26bddee, 0xb26bddee, 0x3800080}, +{0x3800000, 0x1, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0x1, 0x317285d3, 0x317285d3, 0x3800080}, +{0x3800000, 0x1, 0x3c9623b1, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x1, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x1, 0x7b906a6c, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x76, 0x0, 0x0, 0x3800080}, +{0x3800000, 0x76, 0x1, 0x0, 0x3800080}, +{0x3800000, 0x76, 0x76, 0x0, 0x3800080}, +{0x3800000, 0x76, 0x2b94, 0x0, 0x3800080}, +{0x3800000, 0x76, 0x636d24, 0x0, 0x3800080}, +{0x3800000, 0x76, 0x7fffff, 0x0, 0x3800080}, +{0x3800000, 0x76, 0x800000, 0x800000, 0x3800080}, +{0x3800000, 0x76, 0x800002, 0x800002, 0x3800080}, +{0x3800000, 0x76, 0x1398437, 0x1398437, 0x3800080}, +{0x3800000, 0x76, 0xba98d27, 0xba98d27, 0x3800080}, +{0x3800000, 0x76, 0xba98d7a, 0xba98d7a, 0x3800080}, +{0x3800000, 0x76, 0x751f853a, 0x751f853a, 0x3800080}, +{0x3800000, 0x76, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x76, 0x7f7fffff, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x76, 0x7f800000, 0x7f800000, 0x3800080}, +{0x3800000, 0x76, 0x7f800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x76, 0x7f984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x76, 0x7fbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x76, 0x7fc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x76, 0x7fd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x76, 0x7fffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x76, 0x80000000, 0x80000000, 0x3800080}, +{0x3800000, 0x76, 0x80000001, 0x0, 0x3800080}, +{0x3800000, 0x76, 0x80000076, 0x0, 0x3800080}, +{0x3800000, 0x76, 0x80002b94, 0x0, 0x3800080}, +{0x3800000, 0x76, 0x80636d24, 0x0, 0x3800080}, +{0x3800000, 0x76, 0x807fffff, 0x0, 0x3800080}, +{0x3800000, 0x76, 0x80800000, 0x80800000, 0x3800080}, +{0x3800000, 0x76, 0x80800002, 0x80800002, 0x3800080}, +{0x3800000, 0x76, 0x81398437, 0x81398437, 0x3800080}, +{0x3800000, 0x76, 0x8ba98d27, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x76, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x76, 0xf51f853a, 0xf51f853a, 0x3800080}, +{0x3800000, 0x76, 0xff7ffff0, 0xff7ffff0, 0x3800080}, +{0x3800000, 0x76, 0xff7fffff, 0xff7fffff, 0x3800080}, +{0x3800000, 0x76, 0xff800000, 0xff800000, 0x3800080}, +{0x3800000, 0x76, 0xff800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x76, 0xff984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x76, 0xffbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x76, 0xffc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x76, 0xffd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x76, 0xffffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x76, 0x4f3495cb, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x76, 0xe73a5134, 0xe73a5134, 0x3800080}, +{0x3800000, 0x76, 0x7c994e9e, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x76, 0x6164bd6c, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x76, 0x9503366, 0x9503366, 0x3800080}, +{0x3800000, 0x76, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0x76, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0x76, 0x77f31e2f, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x76, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0x76, 0x966320b, 0x966320b, 0x3800080}, +{0x3800000, 0x76, 0xb26bddee, 0xb26bddee, 0x3800080}, +{0x3800000, 0x76, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0x76, 0x317285d3, 0x317285d3, 0x3800080}, +{0x3800000, 0x76, 0x3c9623b1, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x76, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x76, 0x7b906a6c, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x2b94, 0x0, 0x0, 0x3800080}, +{0x3800000, 0x2b94, 0x1, 0x0, 0x3800080}, +{0x3800000, 0x2b94, 0x76, 0x0, 0x3800080}, +{0x3800000, 0x2b94, 0x2b94, 0x0, 0x3800080}, +{0x3800000, 0x2b94, 0x636d24, 0x0, 0x3800080}, +{0x3800000, 0x2b94, 0x7fffff, 0x0, 0x3800080}, +{0x3800000, 0x2b94, 0x800000, 0x800000, 0x3800080}, +{0x3800000, 0x2b94, 0x800002, 0x800002, 0x3800080}, +{0x3800000, 0x2b94, 0x1398437, 0x1398437, 0x3800080}, +{0x3800000, 0x2b94, 0xba98d27, 0xba98d27, 0x3800080}, +{0x3800000, 0x2b94, 0xba98d7a, 0xba98d7a, 0x3800080}, +{0x3800000, 0x2b94, 0x751f853a, 0x751f853a, 0x3800080}, +{0x3800000, 0x2b94, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x2b94, 0x7f7fffff, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x2b94, 0x7f800000, 0x7f800000, 0x3800080}, +{0x3800000, 0x2b94, 0x7f800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x2b94, 0x7f984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x2b94, 0x7fbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x2b94, 0x7fc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x2b94, 0x7fd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x2b94, 0x7fffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x2b94, 0x80000000, 0x80000000, 0x3800080}, +{0x3800000, 0x2b94, 0x80000001, 0x0, 0x3800080}, +{0x3800000, 0x2b94, 0x80000076, 0x0, 0x3800080}, +{0x3800000, 0x2b94, 0x80002b94, 0x0, 0x3800080}, +{0x3800000, 0x2b94, 0x80636d24, 0x0, 0x3800080}, +{0x3800000, 0x2b94, 0x807fffff, 0x0, 0x3800080}, +{0x3800000, 0x2b94, 0x80800000, 0x80800000, 0x3800080}, +{0x3800000, 0x2b94, 0x80800002, 0x80800002, 0x3800080}, +{0x3800000, 0x2b94, 0x81398437, 0x81398437, 0x3800080}, +{0x3800000, 0x2b94, 0x8ba98d27, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x2b94, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x2b94, 0xf51f853a, 0xf51f853a, 0x3800080}, +{0x3800000, 0x2b94, 0xff7ffff0, 0xff7ffff0, 0x3800080}, +{0x3800000, 0x2b94, 0xff7fffff, 0xff7fffff, 0x3800080}, +{0x3800000, 0x2b94, 0xff800000, 0xff800000, 0x3800080}, +{0x3800000, 0x2b94, 0xff800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x2b94, 0xff984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x2b94, 0xffbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x2b94, 0xffc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x2b94, 0xffd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x2b94, 0xffffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x2b94, 0x4f3495cb, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x2b94, 0xe73a5134, 0xe73a5134, 0x3800080}, +{0x3800000, 0x2b94, 0x7c994e9e, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x2b94, 0x6164bd6c, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x2b94, 0x9503366, 0x9503366, 0x3800080}, +{0x3800000, 0x2b94, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0x2b94, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0x2b94, 0x77f31e2f, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x2b94, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0x2b94, 0x966320b, 0x966320b, 0x3800080}, +{0x3800000, 0x2b94, 0xb26bddee, 0xb26bddee, 0x3800080}, +{0x3800000, 0x2b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0x2b94, 0x317285d3, 0x317285d3, 0x3800080}, +{0x3800000, 0x2b94, 0x3c9623b1, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x2b94, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x2b94, 0x7b906a6c, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x636d24, 0x0, 0x0, 0x3800080}, +{0x3800000, 0x636d24, 0x1, 0x0, 0x3800080}, +{0x3800000, 0x636d24, 0x76, 0x0, 0x3800080}, +{0x3800000, 0x636d24, 0x2b94, 0x0, 0x3800080}, +{0x3800000, 0x636d24, 0x636d24, 0x0, 0x3800080}, +{0x3800000, 0x636d24, 0x7fffff, 0x0, 0x3800080}, +{0x3800000, 0x636d24, 0x800000, 0x800000, 0x3800080}, +{0x3800000, 0x636d24, 0x800002, 0x800002, 0x3800080}, +{0x3800000, 0x636d24, 0x1398437, 0x1398437, 0x3800080}, +{0x3800000, 0x636d24, 0xba98d27, 0xba98d27, 0x3800080}, +{0x3800000, 0x636d24, 0xba98d7a, 0xba98d7a, 0x3800080}, +{0x3800000, 0x636d24, 0x751f853a, 0x751f853a, 0x3800080}, +{0x3800000, 0x636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x636d24, 0x7f7fffff, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x636d24, 0x7f800000, 0x7f800000, 0x3800080}, +{0x3800000, 0x636d24, 0x7f800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x636d24, 0x7f984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x636d24, 0x7fbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x636d24, 0x7fc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x636d24, 0x7fd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x636d24, 0x7fffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x636d24, 0x80000000, 0x80000000, 0x3800080}, +{0x3800000, 0x636d24, 0x80000001, 0x0, 0x3800080}, +{0x3800000, 0x636d24, 0x80000076, 0x0, 0x3800080}, +{0x3800000, 0x636d24, 0x80002b94, 0x0, 0x3800080}, +{0x3800000, 0x636d24, 0x80636d24, 0x0, 0x3800080}, +{0x3800000, 0x636d24, 0x807fffff, 0x0, 0x3800080}, +{0x3800000, 0x636d24, 0x80800000, 0x80800000, 0x3800080}, +{0x3800000, 0x636d24, 0x80800002, 0x80800002, 0x3800080}, +{0x3800000, 0x636d24, 0x81398437, 0x81398437, 0x3800080}, +{0x3800000, 0x636d24, 0x8ba98d27, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x636d24, 0xf51f853a, 0xf51f853a, 0x3800080}, +{0x3800000, 0x636d24, 0xff7ffff0, 0xff7ffff0, 0x3800080}, +{0x3800000, 0x636d24, 0xff7fffff, 0xff7fffff, 0x3800080}, +{0x3800000, 0x636d24, 0xff800000, 0xff800000, 0x3800080}, +{0x3800000, 0x636d24, 0xff800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x636d24, 0xff984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x636d24, 0xffbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x636d24, 0xffc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x636d24, 0xffd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x636d24, 0xffffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x636d24, 0x4f3495cb, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x636d24, 0xe73a5134, 0xe73a5134, 0x3800080}, +{0x3800000, 0x636d24, 0x7c994e9e, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x636d24, 0x6164bd6c, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x636d24, 0x9503366, 0x9503366, 0x3800080}, +{0x3800000, 0x636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0x636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0x636d24, 0x77f31e2f, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0x636d24, 0x966320b, 0x966320b, 0x3800080}, +{0x3800000, 0x636d24, 0xb26bddee, 0xb26bddee, 0x3800080}, +{0x3800000, 0x636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0x636d24, 0x317285d3, 0x317285d3, 0x3800080}, +{0x3800000, 0x636d24, 0x3c9623b1, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x636d24, 0x7b906a6c, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x7fffff, 0x0, 0x0, 0x3800080}, +{0x3800000, 0x7fffff, 0x1, 0x0, 0x3800080}, +{0x3800000, 0x7fffff, 0x76, 0x0, 0x3800080}, +{0x3800000, 0x7fffff, 0x2b94, 0x0, 0x3800080}, +{0x3800000, 0x7fffff, 0x636d24, 0x0, 0x3800080}, +{0x3800000, 0x7fffff, 0x7fffff, 0x0, 0x3800080}, +{0x3800000, 0x7fffff, 0x800000, 0x800000, 0x3800080}, +{0x3800000, 0x7fffff, 0x800002, 0x800002, 0x3800080}, +{0x3800000, 0x7fffff, 0x1398437, 0x1398437, 0x3800080}, +{0x3800000, 0x7fffff, 0xba98d27, 0xba98d27, 0x3800080}, +{0x3800000, 0x7fffff, 0xba98d7a, 0xba98d7a, 0x3800080}, +{0x3800000, 0x7fffff, 0x751f853a, 0x751f853a, 0x3800080}, +{0x3800000, 0x7fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x7fffff, 0x7f7fffff, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x7fffff, 0x7f800000, 0x7f800000, 0x3800080}, +{0x3800000, 0x7fffff, 0x7f800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fffff, 0x7f984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fffff, 0x7fbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fffff, 0x7fc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffff, 0x7fd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffff, 0x7fffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffff, 0x80000000, 0x80000000, 0x3800080}, +{0x3800000, 0x7fffff, 0x80000001, 0x0, 0x3800080}, +{0x3800000, 0x7fffff, 0x80000076, 0x0, 0x3800080}, +{0x3800000, 0x7fffff, 0x80002b94, 0x0, 0x3800080}, +{0x3800000, 0x7fffff, 0x80636d24, 0x0, 0x3800080}, +{0x3800000, 0x7fffff, 0x807fffff, 0x0, 0x3800080}, +{0x3800000, 0x7fffff, 0x80800000, 0x80800000, 0x3800080}, +{0x3800000, 0x7fffff, 0x80800002, 0x80800002, 0x3800080}, +{0x3800000, 0x7fffff, 0x81398437, 0x81398437, 0x3800080}, +{0x3800000, 0x7fffff, 0x8ba98d27, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x7fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x7fffff, 0xf51f853a, 0xf51f853a, 0x3800080}, +{0x3800000, 0x7fffff, 0xff7ffff0, 0xff7ffff0, 0x3800080}, +{0x3800000, 0x7fffff, 0xff7fffff, 0xff7fffff, 0x3800080}, +{0x3800000, 0x7fffff, 0xff800000, 0xff800000, 0x3800080}, +{0x3800000, 0x7fffff, 0xff800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fffff, 0xff984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fffff, 0xffbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fffff, 0xffc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffff, 0xffd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffff, 0xffffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffff, 0x4f3495cb, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x7fffff, 0xe73a5134, 0xe73a5134, 0x3800080}, +{0x3800000, 0x7fffff, 0x7c994e9e, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x7fffff, 0x6164bd6c, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x7fffff, 0x9503366, 0x9503366, 0x3800080}, +{0x3800000, 0x7fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0x7fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0x7fffff, 0x77f31e2f, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x7fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0x7fffff, 0x966320b, 0x966320b, 0x3800080}, +{0x3800000, 0x7fffff, 0xb26bddee, 0xb26bddee, 0x3800080}, +{0x3800000, 0x7fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0x7fffff, 0x317285d3, 0x317285d3, 0x3800080}, +{0x3800000, 0x7fffff, 0x3c9623b1, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x7fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x7fffff, 0x7b906a6c, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x800000, 0x0, 0x800000, 0x3800000}, +{0x3800000, 0x800000, 0x1, 0x800000, 0x3800080}, +{0x3800000, 0x800000, 0x76, 0x800000, 0x3800080}, +{0x3800000, 0x800000, 0x2b94, 0x800000, 0x3800080}, +{0x3800000, 0x800000, 0x636d24, 0x800000, 0x3800080}, +{0x3800000, 0x800000, 0x7fffff, 0x800000, 0x3800080}, +{0x3800000, 0x800000, 0x800000, 0x1000000, 0x3800000}, +{0x3800000, 0x800000, 0x800002, 0x1000001, 0x3800000}, +{0x3800000, 0x800000, 0x1398437, 0x1798437, 0x3800000}, +{0x3800000, 0x800000, 0xba98d27, 0xba98d29, 0x3800000}, +{0x3800000, 0x800000, 0xba98d7a, 0xba98d7c, 0x3800000}, +{0x3800000, 0x800000, 0x751f853a, 0x751f853a, 0x3800010}, +{0x3800000, 0x800000, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x800000, 0x7f7fffff, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x800000, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x800000, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x800000, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x800000, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x800000, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x800000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x800000, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x800000, 0x80000000, 0x800000, 0x3800000}, +{0x3800000, 0x800000, 0x80000001, 0x800000, 0x3800080}, +{0x3800000, 0x800000, 0x80000076, 0x800000, 0x3800080}, +{0x3800000, 0x800000, 0x80002b94, 0x800000, 0x3800080}, +{0x3800000, 0x800000, 0x80636d24, 0x800000, 0x3800080}, +{0x3800000, 0x800000, 0x807fffff, 0x800000, 0x3800080}, +{0x3800000, 0x800000, 0x80800000, 0x80000000, 0x3800000}, +{0x3800000, 0x800000, 0x80800002, 0x0, 0x3800008}, +{0x3800000, 0x800000, 0x81398437, 0x80f3086e, 0x3800000}, +{0x3800000, 0x800000, 0x8ba98d27, 0x8ba98d25, 0x3800000}, +{0x3800000, 0x800000, 0x8ba98d7a, 0x8ba98d78, 0x3800000}, +{0x3800000, 0x800000, 0xf51f853a, 0xf51f853a, 0x3800010}, +{0x3800000, 0x800000, 0xff7ffff0, 0xff7ffff0, 0x3800010}, +{0x3800000, 0x800000, 0xff7fffff, 0xff7fffff, 0x3800010}, +{0x3800000, 0x800000, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x800000, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x800000, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x800000, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x800000, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x800000, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x800000, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x800000, 0x4f3495cb, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x800000, 0xe73a5134, 0xe73a5134, 0x3800010}, +{0x3800000, 0x800000, 0x7c994e9e, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x800000, 0x6164bd6c, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x800000, 0x9503366, 0x95033a6, 0x3800000}, +{0x3800000, 0x800000, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0x800000, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0x800000, 0x77f31e2f, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x800000, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0x800000, 0x966320b, 0x966324b, 0x3800000}, +{0x3800000, 0x800000, 0xb26bddee, 0xb26bddee, 0x3800010}, +{0x3800000, 0x800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0x800000, 0x317285d3, 0x317285d3, 0x3800010}, +{0x3800000, 0x800000, 0x3c9623b1, 0x3c9623b1, 0x3800010}, +{0x3800000, 0x800000, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x800000, 0x7b906a6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x800002, 0x0, 0x800002, 0x3800000}, +{0x3800000, 0x800002, 0x1, 0x800002, 0x3800080}, +{0x3800000, 0x800002, 0x76, 0x800002, 0x3800080}, +{0x3800000, 0x800002, 0x2b94, 0x800002, 0x3800080}, +{0x3800000, 0x800002, 0x636d24, 0x800002, 0x3800080}, +{0x3800000, 0x800002, 0x7fffff, 0x800002, 0x3800080}, +{0x3800000, 0x800002, 0x800000, 0x1000001, 0x3800000}, +{0x3800000, 0x800002, 0x800002, 0x1000002, 0x3800000}, +{0x3800000, 0x800002, 0x1398437, 0x1798438, 0x3800000}, +{0x3800000, 0x800002, 0xba98d27, 0xba98d29, 0x3800010}, +{0x3800000, 0x800002, 0xba98d7a, 0xba98d7c, 0x3800010}, +{0x3800000, 0x800002, 0x751f853a, 0x751f853a, 0x3800010}, +{0x3800000, 0x800002, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x800002, 0x7f7fffff, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x800002, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x800002, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x800002, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x800002, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x800002, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x800002, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x800002, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x800002, 0x80000000, 0x800002, 0x3800000}, +{0x3800000, 0x800002, 0x80000001, 0x800002, 0x3800080}, +{0x3800000, 0x800002, 0x80000076, 0x800002, 0x3800080}, +{0x3800000, 0x800002, 0x80002b94, 0x800002, 0x3800080}, +{0x3800000, 0x800002, 0x80636d24, 0x800002, 0x3800080}, +{0x3800000, 0x800002, 0x807fffff, 0x800002, 0x3800080}, +{0x3800000, 0x800002, 0x80800000, 0x0, 0x3800008}, +{0x3800000, 0x800002, 0x80800002, 0x80000000, 0x3800000}, +{0x3800000, 0x800002, 0x81398437, 0x80f3086c, 0x3800000}, +{0x3800000, 0x800002, 0x8ba98d27, 0x8ba98d25, 0x3800010}, +{0x3800000, 0x800002, 0x8ba98d7a, 0x8ba98d78, 0x3800010}, +{0x3800000, 0x800002, 0xf51f853a, 0xf51f853a, 0x3800010}, +{0x3800000, 0x800002, 0xff7ffff0, 0xff7ffff0, 0x3800010}, +{0x3800000, 0x800002, 0xff7fffff, 0xff7fffff, 0x3800010}, +{0x3800000, 0x800002, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x800002, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x800002, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x800002, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x800002, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x800002, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x800002, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x800002, 0x4f3495cb, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x800002, 0xe73a5134, 0xe73a5134, 0x3800010}, +{0x3800000, 0x800002, 0x7c994e9e, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x800002, 0x6164bd6c, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x800002, 0x9503366, 0x95033a6, 0x3800010}, +{0x3800000, 0x800002, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0x800002, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0x800002, 0x77f31e2f, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x800002, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0x800002, 0x966320b, 0x966324b, 0x3800010}, +{0x3800000, 0x800002, 0xb26bddee, 0xb26bddee, 0x3800010}, +{0x3800000, 0x800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0x800002, 0x317285d3, 0x317285d3, 0x3800010}, +{0x3800000, 0x800002, 0x3c9623b1, 0x3c9623b1, 0x3800010}, +{0x3800000, 0x800002, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x800002, 0x7b906a6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x1398437, 0x0, 0x1398437, 0x3800000}, +{0x3800000, 0x1398437, 0x1, 0x1398437, 0x3800080}, +{0x3800000, 0x1398437, 0x76, 0x1398437, 0x3800080}, +{0x3800000, 0x1398437, 0x2b94, 0x1398437, 0x3800080}, +{0x3800000, 0x1398437, 0x636d24, 0x1398437, 0x3800080}, +{0x3800000, 0x1398437, 0x7fffff, 0x1398437, 0x3800080}, +{0x3800000, 0x1398437, 0x800000, 0x1798437, 0x3800000}, +{0x3800000, 0x1398437, 0x800002, 0x1798438, 0x3800000}, +{0x3800000, 0x1398437, 0x1398437, 0x1b98437, 0x3800000}, +{0x3800000, 0x1398437, 0xba98d27, 0xba98d2c, 0x3800010}, +{0x3800000, 0x1398437, 0xba98d7a, 0xba98d7f, 0x3800010}, +{0x3800000, 0x1398437, 0x751f853a, 0x751f853a, 0x3800010}, +{0x3800000, 0x1398437, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x1398437, 0x7f7fffff, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x1398437, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x1398437, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x1398437, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x1398437, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x1398437, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x1398437, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x1398437, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x1398437, 0x80000000, 0x1398437, 0x3800000}, +{0x3800000, 0x1398437, 0x80000001, 0x1398437, 0x3800080}, +{0x3800000, 0x1398437, 0x80000076, 0x1398437, 0x3800080}, +{0x3800000, 0x1398437, 0x80002b94, 0x1398437, 0x3800080}, +{0x3800000, 0x1398437, 0x80636d24, 0x1398437, 0x3800080}, +{0x3800000, 0x1398437, 0x807fffff, 0x1398437, 0x3800080}, +{0x3800000, 0x1398437, 0x80800000, 0xf3086e, 0x3800000}, +{0x3800000, 0x1398437, 0x80800002, 0xf3086c, 0x3800000}, +{0x3800000, 0x1398437, 0x81398437, 0x80000000, 0x3800000}, +{0x3800000, 0x1398437, 0x8ba98d27, 0x8ba98d22, 0x3800010}, +{0x3800000, 0x1398437, 0x8ba98d7a, 0x8ba98d75, 0x3800010}, +{0x3800000, 0x1398437, 0xf51f853a, 0xf51f853a, 0x3800010}, +{0x3800000, 0x1398437, 0xff7ffff0, 0xff7ffff0, 0x3800010}, +{0x3800000, 0x1398437, 0xff7fffff, 0xff7fffff, 0x3800010}, +{0x3800000, 0x1398437, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x1398437, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x1398437, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x1398437, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x1398437, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x1398437, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x1398437, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x1398437, 0x4f3495cb, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x1398437, 0xe73a5134, 0xe73a5134, 0x3800010}, +{0x3800000, 0x1398437, 0x7c994e9e, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x1398437, 0x6164bd6c, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x1398437, 0x9503366, 0x950341f, 0x3800010}, +{0x3800000, 0x1398437, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0x1398437, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0x1398437, 0x77f31e2f, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x1398437, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0x1398437, 0x966320b, 0x96632c4, 0x3800010}, +{0x3800000, 0x1398437, 0xb26bddee, 0xb26bddee, 0x3800010}, +{0x3800000, 0x1398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0x1398437, 0x317285d3, 0x317285d3, 0x3800010}, +{0x3800000, 0x1398437, 0x3c9623b1, 0x3c9623b1, 0x3800010}, +{0x3800000, 0x1398437, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x1398437, 0x7b906a6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0xba98d27, 0x0, 0xba98d27, 0x3800000}, +{0x3800000, 0xba98d27, 0x1, 0xba98d27, 0x3800080}, +{0x3800000, 0xba98d27, 0x76, 0xba98d27, 0x3800080}, +{0x3800000, 0xba98d27, 0x2b94, 0xba98d27, 0x3800080}, +{0x3800000, 0xba98d27, 0x636d24, 0xba98d27, 0x3800080}, +{0x3800000, 0xba98d27, 0x7fffff, 0xba98d27, 0x3800080}, +{0x3800000, 0xba98d27, 0x800000, 0xba98d29, 0x3800000}, +{0x3800000, 0xba98d27, 0x800002, 0xba98d29, 0x3800010}, +{0x3800000, 0xba98d27, 0x1398437, 0xba98d2c, 0x3800010}, +{0x3800000, 0xba98d27, 0xba98d27, 0xc298d27, 0x3800000}, +{0x3800000, 0xba98d27, 0xba98d7a, 0xc298d50, 0x3800010}, +{0x3800000, 0xba98d27, 0x751f853a, 0x751f853a, 0x3800010}, +{0x3800000, 0xba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0xba98d27, 0x7f7fffff, 0x7f7fffff, 0x3800010}, +{0x3800000, 0xba98d27, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0xba98d27, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xba98d27, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xba98d27, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xba98d27, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xba98d27, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xba98d27, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xba98d27, 0x80000000, 0xba98d27, 0x3800000}, +{0x3800000, 0xba98d27, 0x80000001, 0xba98d27, 0x3800080}, +{0x3800000, 0xba98d27, 0x80000076, 0xba98d27, 0x3800080}, +{0x3800000, 0xba98d27, 0x80002b94, 0xba98d27, 0x3800080}, +{0x3800000, 0xba98d27, 0x80636d24, 0xba98d27, 0x3800080}, +{0x3800000, 0xba98d27, 0x807fffff, 0xba98d27, 0x3800080}, +{0x3800000, 0xba98d27, 0x80800000, 0xba98d25, 0x3800000}, +{0x3800000, 0xba98d27, 0x80800002, 0xba98d24, 0x3800010}, +{0x3800000, 0xba98d27, 0x81398437, 0xba98d21, 0x3800010}, +{0x3800000, 0xba98d27, 0x8ba98d27, 0x80000000, 0x3800000}, +{0x3800000, 0xba98d27, 0x8ba98d7a, 0x83260000, 0x3800000}, +{0x3800000, 0xba98d27, 0xf51f853a, 0xf51f853a, 0x3800010}, +{0x3800000, 0xba98d27, 0xff7ffff0, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xba98d27, 0xff7fffff, 0xff7fffff, 0x3800010}, +{0x3800000, 0xba98d27, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0xba98d27, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xba98d27, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xba98d27, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xba98d27, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xba98d27, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xba98d27, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xba98d27, 0x4f3495cb, 0x4f3495cb, 0x3800010}, +{0x3800000, 0xba98d27, 0xe73a5134, 0xe73a5134, 0x3800010}, +{0x3800000, 0xba98d27, 0x7c994e9e, 0x7c994e9e, 0x3800010}, +{0x3800000, 0xba98d27, 0x6164bd6c, 0x6164bd6c, 0x3800010}, +{0x3800000, 0xba98d27, 0x9503366, 0xbb00ec2, 0x3800010}, +{0x3800000, 0xba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0xba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xba98d27, 0x77f31e2f, 0x77f31e2f, 0x3800010}, +{0x3800000, 0xba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0xba98d27, 0x966320b, 0xbb0beb7, 0x3800010}, +{0x3800000, 0xba98d27, 0xb26bddee, 0xb26bddee, 0x3800010}, +{0x3800000, 0xba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0xba98d27, 0x317285d3, 0x317285d3, 0x3800010}, +{0x3800000, 0xba98d27, 0x3c9623b1, 0x3c9623b1, 0x3800010}, +{0x3800000, 0xba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0xba98d27, 0x7b906a6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0xba98d7a, 0x0, 0xba98d7a, 0x3800000}, +{0x3800000, 0xba98d7a, 0x1, 0xba98d7a, 0x3800080}, +{0x3800000, 0xba98d7a, 0x76, 0xba98d7a, 0x3800080}, +{0x3800000, 0xba98d7a, 0x2b94, 0xba98d7a, 0x3800080}, +{0x3800000, 0xba98d7a, 0x636d24, 0xba98d7a, 0x3800080}, +{0x3800000, 0xba98d7a, 0x7fffff, 0xba98d7a, 0x3800080}, +{0x3800000, 0xba98d7a, 0x800000, 0xba98d7c, 0x3800000}, +{0x3800000, 0xba98d7a, 0x800002, 0xba98d7c, 0x3800010}, +{0x3800000, 0xba98d7a, 0x1398437, 0xba98d7f, 0x3800010}, +{0x3800000, 0xba98d7a, 0xba98d27, 0xc298d50, 0x3800010}, +{0x3800000, 0xba98d7a, 0xba98d7a, 0xc298d7a, 0x3800000}, +{0x3800000, 0xba98d7a, 0x751f853a, 0x751f853a, 0x3800010}, +{0x3800000, 0xba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0xba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3800010}, +{0x3800000, 0xba98d7a, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0xba98d7a, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xba98d7a, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xba98d7a, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xba98d7a, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xba98d7a, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xba98d7a, 0x80000000, 0xba98d7a, 0x3800000}, +{0x3800000, 0xba98d7a, 0x80000001, 0xba98d7a, 0x3800080}, +{0x3800000, 0xba98d7a, 0x80000076, 0xba98d7a, 0x3800080}, +{0x3800000, 0xba98d7a, 0x80002b94, 0xba98d7a, 0x3800080}, +{0x3800000, 0xba98d7a, 0x80636d24, 0xba98d7a, 0x3800080}, +{0x3800000, 0xba98d7a, 0x807fffff, 0xba98d7a, 0x3800080}, +{0x3800000, 0xba98d7a, 0x80800000, 0xba98d78, 0x3800000}, +{0x3800000, 0xba98d7a, 0x80800002, 0xba98d77, 0x3800010}, +{0x3800000, 0xba98d7a, 0x81398437, 0xba98d74, 0x3800010}, +{0x3800000, 0xba98d7a, 0x8ba98d27, 0x3260000, 0x3800000}, +{0x3800000, 0xba98d7a, 0x8ba98d7a, 0x80000000, 0x3800000}, +{0x3800000, 0xba98d7a, 0xf51f853a, 0xf51f853a, 0x3800010}, +{0x3800000, 0xba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xba98d7a, 0xff7fffff, 0xff7fffff, 0x3800010}, +{0x3800000, 0xba98d7a, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0xba98d7a, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xba98d7a, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xba98d7a, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xba98d7a, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xba98d7a, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xba98d7a, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3800010}, +{0x3800000, 0xba98d7a, 0xe73a5134, 0xe73a5134, 0x3800010}, +{0x3800000, 0xba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3800010}, +{0x3800000, 0xba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3800010}, +{0x3800000, 0xba98d7a, 0x9503366, 0xbb00f15, 0x3800010}, +{0x3800000, 0xba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0xba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3800010}, +{0x3800000, 0xba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0xba98d7a, 0x966320b, 0xbb0bf0a, 0x3800010}, +{0x3800000, 0xba98d7a, 0xb26bddee, 0xb26bddee, 0x3800010}, +{0x3800000, 0xba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0xba98d7a, 0x317285d3, 0x317285d3, 0x3800010}, +{0x3800000, 0xba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3800010}, +{0x3800000, 0xba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0xba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x751f853a, 0x0, 0x751f853a, 0x3800000}, +{0x3800000, 0x751f853a, 0x1, 0x751f853a, 0x3800080}, +{0x3800000, 0x751f853a, 0x76, 0x751f853a, 0x3800080}, +{0x3800000, 0x751f853a, 0x2b94, 0x751f853a, 0x3800080}, +{0x3800000, 0x751f853a, 0x636d24, 0x751f853a, 0x3800080}, +{0x3800000, 0x751f853a, 0x7fffff, 0x751f853a, 0x3800080}, +{0x3800000, 0x751f853a, 0x800000, 0x751f853a, 0x3800010}, +{0x3800000, 0x751f853a, 0x800002, 0x751f853a, 0x3800010}, +{0x3800000, 0x751f853a, 0x1398437, 0x751f853a, 0x3800010}, +{0x3800000, 0x751f853a, 0xba98d27, 0x751f853a, 0x3800010}, +{0x3800000, 0x751f853a, 0xba98d7a, 0x751f853a, 0x3800010}, +{0x3800000, 0x751f853a, 0x751f853a, 0x759f853a, 0x3800000}, +{0x3800000, 0x751f853a, 0x7f7ffff0, 0x7f7ffff9, 0x3800010}, +{0x3800000, 0x751f853a, 0x7f7fffff, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x751f853a, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x751f853a, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x751f853a, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x751f853a, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x751f853a, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x751f853a, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x751f853a, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x751f853a, 0x80000000, 0x751f853a, 0x3800000}, +{0x3800000, 0x751f853a, 0x80000001, 0x751f853a, 0x3800080}, +{0x3800000, 0x751f853a, 0x80000076, 0x751f853a, 0x3800080}, +{0x3800000, 0x751f853a, 0x80002b94, 0x751f853a, 0x3800080}, +{0x3800000, 0x751f853a, 0x80636d24, 0x751f853a, 0x3800080}, +{0x3800000, 0x751f853a, 0x807fffff, 0x751f853a, 0x3800080}, +{0x3800000, 0x751f853a, 0x80800000, 0x751f8539, 0x3800010}, +{0x3800000, 0x751f853a, 0x80800002, 0x751f8539, 0x3800010}, +{0x3800000, 0x751f853a, 0x81398437, 0x751f8539, 0x3800010}, +{0x3800000, 0x751f853a, 0x8ba98d27, 0x751f8539, 0x3800010}, +{0x3800000, 0x751f853a, 0x8ba98d7a, 0x751f8539, 0x3800010}, +{0x3800000, 0x751f853a, 0xf51f853a, 0x80000000, 0x3800000}, +{0x3800000, 0x751f853a, 0xff7ffff0, 0xff7fffe7, 0x3800010}, +{0x3800000, 0x751f853a, 0xff7fffff, 0xff7ffff6, 0x3800010}, +{0x3800000, 0x751f853a, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x751f853a, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x751f853a, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x751f853a, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x751f853a, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x751f853a, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x751f853a, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x751f853a, 0x4f3495cb, 0x751f853a, 0x3800010}, +{0x3800000, 0x751f853a, 0xe73a5134, 0x751f8539, 0x3800010}, +{0x3800000, 0x751f853a, 0x7c994e9e, 0x7c994fdd, 0x3800010}, +{0x3800000, 0x751f853a, 0x6164bd6c, 0x751f853a, 0x3800010}, +{0x3800000, 0x751f853a, 0x9503366, 0x751f853a, 0x3800010}, +{0x3800000, 0x751f853a, 0xbf5a97c9, 0x751f8539, 0x3800010}, +{0x3800000, 0x751f853a, 0xe6ff1a14, 0x751f8539, 0x3800010}, +{0x3800000, 0x751f853a, 0x77f31e2f, 0x77f81a58, 0x3800010}, +{0x3800000, 0x751f853a, 0xaab4d7d8, 0x751f8539, 0x3800010}, +{0x3800000, 0x751f853a, 0x966320b, 0x751f853a, 0x3800010}, +{0x3800000, 0x751f853a, 0xb26bddee, 0x751f8539, 0x3800010}, +{0x3800000, 0x751f853a, 0xb5c8e5d3, 0x751f8539, 0x3800010}, +{0x3800000, 0x751f853a, 0x317285d3, 0x751f853a, 0x3800010}, +{0x3800000, 0x751f853a, 0x3c9623b1, 0x751f853a, 0x3800010}, +{0x3800000, 0x751f853a, 0x51fd2c7c, 0x751f853a, 0x3800010}, +{0x3800000, 0x751f853a, 0x7b906a6c, 0x7b906f68, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x0, 0x7f7ffff0, 0x3800000}, +{0x3800000, 0x7f7ffff0, 0x1, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x7f7ffff0, 0x76, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x7f7ffff0, 0x2b94, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x7f7ffff0, 0x636d24, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x7f7ffff0, 0x7fffff, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x7f7ffff0, 0x800000, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x800002, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x1398437, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0xba98d27, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0xba98d7a, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x751f853a, 0x7f7ffff9, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x7f7ffff0, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7f7ffff0, 0x7f7fffff, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7f7ffff0, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f7ffff0, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f7ffff0, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f7ffff0, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f7ffff0, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f7ffff0, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f7ffff0, 0x80000000, 0x7f7ffff0, 0x3800000}, +{0x3800000, 0x7f7ffff0, 0x80000001, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x7f7ffff0, 0x80000076, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x7f7ffff0, 0x80002b94, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x7f7ffff0, 0x80636d24, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x7f7ffff0, 0x807fffff, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x7f7ffff0, 0x80800000, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x80800002, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x81398437, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x8ba98d27, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x8ba98d7a, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0xf51f853a, 0x7f7fffe6, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0xff7ffff0, 0x80000000, 0x3800000}, +{0x3800000, 0x7f7ffff0, 0xff7fffff, 0xf5700000, 0x3800000}, +{0x3800000, 0x7f7ffff0, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x7f7ffff0, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f7ffff0, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f7ffff0, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f7ffff0, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f7ffff0, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f7ffff0, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f7ffff0, 0x4f3495cb, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0xe73a5134, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x7c994e9e, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7f7ffff0, 0x6164bd6c, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x9503366, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0xbf5a97c9, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0xe6ff1a14, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x77f31e2f, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7f7ffff0, 0xaab4d7d8, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x966320b, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0xb26bddee, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0xb5c8e5d3, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x317285d3, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x3c9623b1, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x51fd2c7c, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x7f7ffff0, 0x7b906a6c, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7f7fffff, 0x0, 0x7f7fffff, 0x3800000}, +{0x3800000, 0x7f7fffff, 0x1, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x7f7fffff, 0x76, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x7f7fffff, 0x2b94, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x7f7fffff, 0x636d24, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x7f7fffff, 0x7fffff, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x7f7fffff, 0x800000, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x800002, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x1398437, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x7f7fffff, 0xba98d27, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x7f7fffff, 0xba98d7a, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x751f853a, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7f7fffff, 0x7f7ffff0, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7f7fffff, 0x7f7fffff, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7f7fffff, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f7fffff, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f7fffff, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f7fffff, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f7fffff, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f7fffff, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f7fffff, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f7fffff, 0x80000000, 0x7f7fffff, 0x3800000}, +{0x3800000, 0x7f7fffff, 0x80000001, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x7f7fffff, 0x80000076, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x7f7fffff, 0x80002b94, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x7f7fffff, 0x80636d24, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x7f7fffff, 0x807fffff, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x7f7fffff, 0x80800000, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x80800002, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x81398437, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x8ba98d27, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x8ba98d7a, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x7f7fffff, 0xf51f853a, 0x7f7ffff5, 0x3800010}, +{0x3800000, 0x7f7fffff, 0xff7ffff0, 0x75700000, 0x3800000}, +{0x3800000, 0x7f7fffff, 0xff7fffff, 0x80000000, 0x3800000}, +{0x3800000, 0x7f7fffff, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x7f7fffff, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f7fffff, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f7fffff, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f7fffff, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f7fffff, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f7fffff, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f7fffff, 0x4f3495cb, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x7f7fffff, 0xe73a5134, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x7c994e9e, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7f7fffff, 0x6164bd6c, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x9503366, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x7f7fffff, 0xbf5a97c9, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x7f7fffff, 0xe6ff1a14, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x77f31e2f, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7f7fffff, 0xaab4d7d8, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x966320b, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x7f7fffff, 0xb26bddee, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x7f7fffff, 0xb5c8e5d3, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x317285d3, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x3c9623b1, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x51fd2c7c, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x7f7fffff, 0x7b906a6c, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7f800000, 0x0, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x1, 0x7f800000, 0x3800080}, +{0x3800000, 0x7f800000, 0x76, 0x7f800000, 0x3800080}, +{0x3800000, 0x7f800000, 0x2b94, 0x7f800000, 0x3800080}, +{0x3800000, 0x7f800000, 0x636d24, 0x7f800000, 0x3800080}, +{0x3800000, 0x7f800000, 0x7fffff, 0x7f800000, 0x3800080}, +{0x3800000, 0x7f800000, 0x800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x800002, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x1398437, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0xba98d27, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0xba98d7a, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x751f853a, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x7f7ffff0, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x7f7fffff, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800000, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800000, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800000, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f800000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f800000, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f800000, 0x80000000, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x80000001, 0x7f800000, 0x3800080}, +{0x3800000, 0x7f800000, 0x80000076, 0x7f800000, 0x3800080}, +{0x3800000, 0x7f800000, 0x80002b94, 0x7f800000, 0x3800080}, +{0x3800000, 0x7f800000, 0x80636d24, 0x7f800000, 0x3800080}, +{0x3800000, 0x7f800000, 0x807fffff, 0x7f800000, 0x3800080}, +{0x3800000, 0x7f800000, 0x80800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x80800002, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x81398437, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x8ba98d27, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x8ba98d7a, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0xf51f853a, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0xff7ffff0, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0xff7fffff, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0xff800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800000, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800000, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800000, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800000, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f800000, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f800000, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7f800000, 0x4f3495cb, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0xe73a5134, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x7c994e9e, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x6164bd6c, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x9503366, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0xbf5a97c9, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0xe6ff1a14, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x77f31e2f, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0xaab4d7d8, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x966320b, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0xb26bddee, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0xb5c8e5d3, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x317285d3, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x3c9623b1, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x51fd2c7c, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800000, 0x7b906a6c, 0x7f800000, 0x3800000}, +{0x3800000, 0x7f800001, 0x0, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x1, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f800001, 0x76, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f800001, 0x2b94, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f800001, 0x636d24, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f800001, 0x7fffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f800001, 0x800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x800002, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x1398437, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xba98d27, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xba98d7a, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x751f853a, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x7f7ffff0, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x7f7fffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x7f800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x7fc00000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x7fd9ba98, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x7fffffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x80000000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x80000001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f800001, 0x80000076, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f800001, 0x80002b94, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f800001, 0x80636d24, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f800001, 0x807fffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f800001, 0x80800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x80800002, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x81398437, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x8ba98d27, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x8ba98d7a, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xf51f853a, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xff7ffff0, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xff7fffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xff800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xffc00000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xffd9ba98, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xffffffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x4f3495cb, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xe73a5134, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x7c994e9e, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x6164bd6c, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x9503366, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xbf5a97c9, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xe6ff1a14, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x77f31e2f, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xaab4d7d8, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x966320b, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xb26bddee, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0xb5c8e5d3, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x317285d3, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x3c9623b1, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x51fd2c7c, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f800001, 0x7b906a6c, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x0, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x1, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f984a37, 0x76, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f984a37, 0x2b94, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f984a37, 0x636d24, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f984a37, 0x7fffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f984a37, 0x800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x800002, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x1398437, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xba98d27, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xba98d7a, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x751f853a, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x7f7ffff0, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x7f7fffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x7f800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x7fc00000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x7fd9ba98, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x7fffffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x80000000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x80000001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f984a37, 0x80000076, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f984a37, 0x80002b94, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f984a37, 0x80636d24, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f984a37, 0x807fffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7f984a37, 0x80800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x80800002, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x81398437, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x8ba98d27, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x8ba98d7a, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xf51f853a, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xff7ffff0, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xff7fffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xff800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xffc00000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xffd9ba98, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xffffffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x4f3495cb, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xe73a5134, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x7c994e9e, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x6164bd6c, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x9503366, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xbf5a97c9, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xe6ff1a14, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x77f31e2f, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xaab4d7d8, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x966320b, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xb26bddee, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0xb5c8e5d3, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x317285d3, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x3c9623b1, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x51fd2c7c, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7f984a37, 0x7b906a6c, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x0, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x1, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fbfffff, 0x76, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fbfffff, 0x2b94, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fbfffff, 0x636d24, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fbfffff, 0x7fffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fbfffff, 0x800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x800002, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x1398437, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xba98d27, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xba98d7a, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x751f853a, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x7f7ffff0, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x7f7fffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x7f800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x7fc00000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x7fd9ba98, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x7fffffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x80000000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x80000001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fbfffff, 0x80000076, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fbfffff, 0x80002b94, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fbfffff, 0x80636d24, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fbfffff, 0x807fffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x7fbfffff, 0x80800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x80800002, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x81398437, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x8ba98d27, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x8ba98d7a, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xf51f853a, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xff7ffff0, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xff7fffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xff800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xffc00000, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xffd9ba98, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xffffffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x4f3495cb, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xe73a5134, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x7c994e9e, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x6164bd6c, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x9503366, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xbf5a97c9, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xe6ff1a14, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x77f31e2f, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xaab4d7d8, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x966320b, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xb26bddee, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x317285d3, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x3c9623b1, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x51fd2c7c, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fbfffff, 0x7b906a6c, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fc00000, 0x0, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x1, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fc00000, 0x76, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fc00000, 0x2b94, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fc00000, 0x636d24, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fc00000, 0x7fffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fc00000, 0x800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x800002, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x1398437, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xba98d27, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xba98d7a, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x751f853a, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x7f7ffff0, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x7f7fffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x7f800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fc00000, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fc00000, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fc00000, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x80000000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x80000001, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fc00000, 0x80000076, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fc00000, 0x80002b94, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fc00000, 0x80636d24, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fc00000, 0x807fffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fc00000, 0x80800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x80800002, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x81398437, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x8ba98d27, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x8ba98d7a, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xf51f853a, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xff7ffff0, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xff7fffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xff800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fc00000, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fc00000, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fc00000, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x4f3495cb, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xe73a5134, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x7c994e9e, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x6164bd6c, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x9503366, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xbf5a97c9, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xe6ff1a14, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x77f31e2f, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xaab4d7d8, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x966320b, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xb26bddee, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0xb5c8e5d3, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x317285d3, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x3c9623b1, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x51fd2c7c, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fc00000, 0x7b906a6c, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x0, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x1, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fd9ba98, 0x76, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fd9ba98, 0x2b94, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fd9ba98, 0x636d24, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fd9ba98, 0x7fffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fd9ba98, 0x800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x800002, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x1398437, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xba98d27, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xba98d7a, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x751f853a, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x7f7fffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x7f800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fd9ba98, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fd9ba98, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fd9ba98, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x80000000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x80000001, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fd9ba98, 0x80000076, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fd9ba98, 0x80002b94, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fd9ba98, 0x80636d24, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fd9ba98, 0x807fffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fd9ba98, 0x80800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x80800002, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x81398437, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x8ba98d27, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xf51f853a, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xff7ffff0, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xff7fffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xff800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fd9ba98, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fd9ba98, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fd9ba98, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x4f3495cb, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xe73a5134, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x7c994e9e, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x6164bd6c, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x9503366, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x77f31e2f, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x966320b, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xb26bddee, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x317285d3, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x3c9623b1, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fd9ba98, 0x7b906a6c, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x0, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x1, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffffff, 0x76, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffffff, 0x2b94, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffffff, 0x636d24, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffffff, 0x7fffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffffff, 0x800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x800002, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x1398437, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xba98d27, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xba98d7a, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x751f853a, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x7f7ffff0, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x7f7fffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x7f800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fffffff, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fffffff, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fffffff, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x80000000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x80000001, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffffff, 0x80000076, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffffff, 0x80002b94, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffffff, 0x80636d24, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffffff, 0x807fffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x7fffffff, 0x80800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x80800002, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x81398437, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x8ba98d27, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x8ba98d7a, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xf51f853a, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xff7ffff0, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xff7fffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xff800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fffffff, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fffffff, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7fffffff, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x4f3495cb, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xe73a5134, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x7c994e9e, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x6164bd6c, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x9503366, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xbf5a97c9, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xe6ff1a14, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x77f31e2f, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xaab4d7d8, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x966320b, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xb26bddee, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0xb5c8e5d3, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x317285d3, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x3c9623b1, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x51fd2c7c, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7fffffff, 0x7b906a6c, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80000000, 0x0, 0x80000000, 0x3800000}, +{0x3800000, 0x80000000, 0x1, 0x80000000, 0x3800080}, +{0x3800000, 0x80000000, 0x76, 0x80000000, 0x3800080}, +{0x3800000, 0x80000000, 0x2b94, 0x80000000, 0x3800080}, +{0x3800000, 0x80000000, 0x636d24, 0x80000000, 0x3800080}, +{0x3800000, 0x80000000, 0x7fffff, 0x80000000, 0x3800080}, +{0x3800000, 0x80000000, 0x800000, 0x800000, 0x3800000}, +{0x3800000, 0x80000000, 0x800002, 0x800002, 0x3800000}, +{0x3800000, 0x80000000, 0x1398437, 0x1398437, 0x3800000}, +{0x3800000, 0x80000000, 0xba98d27, 0xba98d27, 0x3800000}, +{0x3800000, 0x80000000, 0xba98d7a, 0xba98d7a, 0x3800000}, +{0x3800000, 0x80000000, 0x751f853a, 0x751f853a, 0x3800000}, +{0x3800000, 0x80000000, 0x7f7ffff0, 0x7f7ffff0, 0x3800000}, +{0x3800000, 0x80000000, 0x7f7fffff, 0x7f7fffff, 0x3800000}, +{0x3800000, 0x80000000, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x80000000, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80000000, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80000000, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80000000, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80000000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80000000, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80000000, 0x80000000, 0x80000000, 0x3800000}, +{0x3800000, 0x80000000, 0x80000001, 0x80000000, 0x3800080}, +{0x3800000, 0x80000000, 0x80000076, 0x80000000, 0x3800080}, +{0x3800000, 0x80000000, 0x80002b94, 0x80000000, 0x3800080}, +{0x3800000, 0x80000000, 0x80636d24, 0x80000000, 0x3800080}, +{0x3800000, 0x80000000, 0x807fffff, 0x80000000, 0x3800080}, +{0x3800000, 0x80000000, 0x80800000, 0x80800000, 0x3800000}, +{0x3800000, 0x80000000, 0x80800002, 0x80800002, 0x3800000}, +{0x3800000, 0x80000000, 0x81398437, 0x81398437, 0x3800000}, +{0x3800000, 0x80000000, 0x8ba98d27, 0x8ba98d27, 0x3800000}, +{0x3800000, 0x80000000, 0x8ba98d7a, 0x8ba98d7a, 0x3800000}, +{0x3800000, 0x80000000, 0xf51f853a, 0xf51f853a, 0x3800000}, +{0x3800000, 0x80000000, 0xff7ffff0, 0xff7ffff0, 0x3800000}, +{0x3800000, 0x80000000, 0xff7fffff, 0xff7fffff, 0x3800000}, +{0x3800000, 0x80000000, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x80000000, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80000000, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80000000, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80000000, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80000000, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80000000, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80000000, 0x4f3495cb, 0x4f3495cb, 0x3800000}, +{0x3800000, 0x80000000, 0xe73a5134, 0xe73a5134, 0x3800000}, +{0x3800000, 0x80000000, 0x7c994e9e, 0x7c994e9e, 0x3800000}, +{0x3800000, 0x80000000, 0x6164bd6c, 0x6164bd6c, 0x3800000}, +{0x3800000, 0x80000000, 0x9503366, 0x9503366, 0x3800000}, +{0x3800000, 0x80000000, 0xbf5a97c9, 0xbf5a97c9, 0x3800000}, +{0x3800000, 0x80000000, 0xe6ff1a14, 0xe6ff1a14, 0x3800000}, +{0x3800000, 0x80000000, 0x77f31e2f, 0x77f31e2f, 0x3800000}, +{0x3800000, 0x80000000, 0xaab4d7d8, 0xaab4d7d8, 0x3800000}, +{0x3800000, 0x80000000, 0x966320b, 0x966320b, 0x3800000}, +{0x3800000, 0x80000000, 0xb26bddee, 0xb26bddee, 0x3800000}, +{0x3800000, 0x80000000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800000}, +{0x3800000, 0x80000000, 0x317285d3, 0x317285d3, 0x3800000}, +{0x3800000, 0x80000000, 0x3c9623b1, 0x3c9623b1, 0x3800000}, +{0x3800000, 0x80000000, 0x51fd2c7c, 0x51fd2c7c, 0x3800000}, +{0x3800000, 0x80000000, 0x7b906a6c, 0x7b906a6c, 0x3800000}, +{0x3800000, 0x80000001, 0x0, 0x0, 0x3800080}, +{0x3800000, 0x80000001, 0x1, 0x0, 0x3800080}, +{0x3800000, 0x80000001, 0x76, 0x0, 0x3800080}, +{0x3800000, 0x80000001, 0x2b94, 0x0, 0x3800080}, +{0x3800000, 0x80000001, 0x636d24, 0x0, 0x3800080}, +{0x3800000, 0x80000001, 0x7fffff, 0x0, 0x3800080}, +{0x3800000, 0x80000001, 0x800000, 0x800000, 0x3800080}, +{0x3800000, 0x80000001, 0x800002, 0x800002, 0x3800080}, +{0x3800000, 0x80000001, 0x1398437, 0x1398437, 0x3800080}, +{0x3800000, 0x80000001, 0xba98d27, 0xba98d27, 0x3800080}, +{0x3800000, 0x80000001, 0xba98d7a, 0xba98d7a, 0x3800080}, +{0x3800000, 0x80000001, 0x751f853a, 0x751f853a, 0x3800080}, +{0x3800000, 0x80000001, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x80000001, 0x7f7fffff, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x80000001, 0x7f800000, 0x7f800000, 0x3800080}, +{0x3800000, 0x80000001, 0x7f800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80000001, 0x7f984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80000001, 0x7fbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80000001, 0x7fc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80000001, 0x7fd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80000001, 0x7fffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80000001, 0x80000000, 0x80000000, 0x3800080}, +{0x3800000, 0x80000001, 0x80000001, 0x0, 0x3800080}, +{0x3800000, 0x80000001, 0x80000076, 0x0, 0x3800080}, +{0x3800000, 0x80000001, 0x80002b94, 0x0, 0x3800080}, +{0x3800000, 0x80000001, 0x80636d24, 0x0, 0x3800080}, +{0x3800000, 0x80000001, 0x807fffff, 0x0, 0x3800080}, +{0x3800000, 0x80000001, 0x80800000, 0x80800000, 0x3800080}, +{0x3800000, 0x80000001, 0x80800002, 0x80800002, 0x3800080}, +{0x3800000, 0x80000001, 0x81398437, 0x81398437, 0x3800080}, +{0x3800000, 0x80000001, 0x8ba98d27, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x80000001, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x80000001, 0xf51f853a, 0xf51f853a, 0x3800080}, +{0x3800000, 0x80000001, 0xff7ffff0, 0xff7ffff0, 0x3800080}, +{0x3800000, 0x80000001, 0xff7fffff, 0xff7fffff, 0x3800080}, +{0x3800000, 0x80000001, 0xff800000, 0xff800000, 0x3800080}, +{0x3800000, 0x80000001, 0xff800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80000001, 0xff984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80000001, 0xffbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80000001, 0xffc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80000001, 0xffd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80000001, 0xffffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80000001, 0x4f3495cb, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x80000001, 0xe73a5134, 0xe73a5134, 0x3800080}, +{0x3800000, 0x80000001, 0x7c994e9e, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x80000001, 0x6164bd6c, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x80000001, 0x9503366, 0x9503366, 0x3800080}, +{0x3800000, 0x80000001, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0x80000001, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0x80000001, 0x77f31e2f, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x80000001, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0x80000001, 0x966320b, 0x966320b, 0x3800080}, +{0x3800000, 0x80000001, 0xb26bddee, 0xb26bddee, 0x3800080}, +{0x3800000, 0x80000001, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0x80000001, 0x317285d3, 0x317285d3, 0x3800080}, +{0x3800000, 0x80000001, 0x3c9623b1, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x80000001, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x80000001, 0x7b906a6c, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x80000076, 0x0, 0x0, 0x3800080}, +{0x3800000, 0x80000076, 0x1, 0x0, 0x3800080}, +{0x3800000, 0x80000076, 0x76, 0x0, 0x3800080}, +{0x3800000, 0x80000076, 0x2b94, 0x0, 0x3800080}, +{0x3800000, 0x80000076, 0x636d24, 0x0, 0x3800080}, +{0x3800000, 0x80000076, 0x7fffff, 0x0, 0x3800080}, +{0x3800000, 0x80000076, 0x800000, 0x800000, 0x3800080}, +{0x3800000, 0x80000076, 0x800002, 0x800002, 0x3800080}, +{0x3800000, 0x80000076, 0x1398437, 0x1398437, 0x3800080}, +{0x3800000, 0x80000076, 0xba98d27, 0xba98d27, 0x3800080}, +{0x3800000, 0x80000076, 0xba98d7a, 0xba98d7a, 0x3800080}, +{0x3800000, 0x80000076, 0x751f853a, 0x751f853a, 0x3800080}, +{0x3800000, 0x80000076, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x80000076, 0x7f7fffff, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x80000076, 0x7f800000, 0x7f800000, 0x3800080}, +{0x3800000, 0x80000076, 0x7f800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80000076, 0x7f984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80000076, 0x7fbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80000076, 0x7fc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80000076, 0x7fd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80000076, 0x7fffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80000076, 0x80000000, 0x80000000, 0x3800080}, +{0x3800000, 0x80000076, 0x80000001, 0x0, 0x3800080}, +{0x3800000, 0x80000076, 0x80000076, 0x0, 0x3800080}, +{0x3800000, 0x80000076, 0x80002b94, 0x0, 0x3800080}, +{0x3800000, 0x80000076, 0x80636d24, 0x0, 0x3800080}, +{0x3800000, 0x80000076, 0x807fffff, 0x0, 0x3800080}, +{0x3800000, 0x80000076, 0x80800000, 0x80800000, 0x3800080}, +{0x3800000, 0x80000076, 0x80800002, 0x80800002, 0x3800080}, +{0x3800000, 0x80000076, 0x81398437, 0x81398437, 0x3800080}, +{0x3800000, 0x80000076, 0x8ba98d27, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x80000076, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x80000076, 0xf51f853a, 0xf51f853a, 0x3800080}, +{0x3800000, 0x80000076, 0xff7ffff0, 0xff7ffff0, 0x3800080}, +{0x3800000, 0x80000076, 0xff7fffff, 0xff7fffff, 0x3800080}, +{0x3800000, 0x80000076, 0xff800000, 0xff800000, 0x3800080}, +{0x3800000, 0x80000076, 0xff800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80000076, 0xff984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80000076, 0xffbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80000076, 0xffc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80000076, 0xffd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80000076, 0xffffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80000076, 0x4f3495cb, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x80000076, 0xe73a5134, 0xe73a5134, 0x3800080}, +{0x3800000, 0x80000076, 0x7c994e9e, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x80000076, 0x6164bd6c, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x80000076, 0x9503366, 0x9503366, 0x3800080}, +{0x3800000, 0x80000076, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0x80000076, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0x80000076, 0x77f31e2f, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x80000076, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0x80000076, 0x966320b, 0x966320b, 0x3800080}, +{0x3800000, 0x80000076, 0xb26bddee, 0xb26bddee, 0x3800080}, +{0x3800000, 0x80000076, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0x80000076, 0x317285d3, 0x317285d3, 0x3800080}, +{0x3800000, 0x80000076, 0x3c9623b1, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x80000076, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x80000076, 0x7b906a6c, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x80002b94, 0x0, 0x0, 0x3800080}, +{0x3800000, 0x80002b94, 0x1, 0x0, 0x3800080}, +{0x3800000, 0x80002b94, 0x76, 0x0, 0x3800080}, +{0x3800000, 0x80002b94, 0x2b94, 0x0, 0x3800080}, +{0x3800000, 0x80002b94, 0x636d24, 0x0, 0x3800080}, +{0x3800000, 0x80002b94, 0x7fffff, 0x0, 0x3800080}, +{0x3800000, 0x80002b94, 0x800000, 0x800000, 0x3800080}, +{0x3800000, 0x80002b94, 0x800002, 0x800002, 0x3800080}, +{0x3800000, 0x80002b94, 0x1398437, 0x1398437, 0x3800080}, +{0x3800000, 0x80002b94, 0xba98d27, 0xba98d27, 0x3800080}, +{0x3800000, 0x80002b94, 0xba98d7a, 0xba98d7a, 0x3800080}, +{0x3800000, 0x80002b94, 0x751f853a, 0x751f853a, 0x3800080}, +{0x3800000, 0x80002b94, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x80002b94, 0x7f7fffff, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x80002b94, 0x7f800000, 0x7f800000, 0x3800080}, +{0x3800000, 0x80002b94, 0x7f800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80002b94, 0x7f984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80002b94, 0x7fbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80002b94, 0x7fc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80002b94, 0x7fd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80002b94, 0x7fffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80002b94, 0x80000000, 0x80000000, 0x3800080}, +{0x3800000, 0x80002b94, 0x80000001, 0x0, 0x3800080}, +{0x3800000, 0x80002b94, 0x80000076, 0x0, 0x3800080}, +{0x3800000, 0x80002b94, 0x80002b94, 0x0, 0x3800080}, +{0x3800000, 0x80002b94, 0x80636d24, 0x0, 0x3800080}, +{0x3800000, 0x80002b94, 0x807fffff, 0x0, 0x3800080}, +{0x3800000, 0x80002b94, 0x80800000, 0x80800000, 0x3800080}, +{0x3800000, 0x80002b94, 0x80800002, 0x80800002, 0x3800080}, +{0x3800000, 0x80002b94, 0x81398437, 0x81398437, 0x3800080}, +{0x3800000, 0x80002b94, 0x8ba98d27, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x80002b94, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x80002b94, 0xf51f853a, 0xf51f853a, 0x3800080}, +{0x3800000, 0x80002b94, 0xff7ffff0, 0xff7ffff0, 0x3800080}, +{0x3800000, 0x80002b94, 0xff7fffff, 0xff7fffff, 0x3800080}, +{0x3800000, 0x80002b94, 0xff800000, 0xff800000, 0x3800080}, +{0x3800000, 0x80002b94, 0xff800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80002b94, 0xff984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80002b94, 0xffbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80002b94, 0xffc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80002b94, 0xffd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80002b94, 0xffffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80002b94, 0x4f3495cb, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x80002b94, 0xe73a5134, 0xe73a5134, 0x3800080}, +{0x3800000, 0x80002b94, 0x7c994e9e, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x80002b94, 0x6164bd6c, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x80002b94, 0x9503366, 0x9503366, 0x3800080}, +{0x3800000, 0x80002b94, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0x80002b94, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0x80002b94, 0x77f31e2f, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x80002b94, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0x80002b94, 0x966320b, 0x966320b, 0x3800080}, +{0x3800000, 0x80002b94, 0xb26bddee, 0xb26bddee, 0x3800080}, +{0x3800000, 0x80002b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0x80002b94, 0x317285d3, 0x317285d3, 0x3800080}, +{0x3800000, 0x80002b94, 0x3c9623b1, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x80002b94, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x80002b94, 0x7b906a6c, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x80636d24, 0x0, 0x0, 0x3800080}, +{0x3800000, 0x80636d24, 0x1, 0x0, 0x3800080}, +{0x3800000, 0x80636d24, 0x76, 0x0, 0x3800080}, +{0x3800000, 0x80636d24, 0x2b94, 0x0, 0x3800080}, +{0x3800000, 0x80636d24, 0x636d24, 0x0, 0x3800080}, +{0x3800000, 0x80636d24, 0x7fffff, 0x0, 0x3800080}, +{0x3800000, 0x80636d24, 0x800000, 0x800000, 0x3800080}, +{0x3800000, 0x80636d24, 0x800002, 0x800002, 0x3800080}, +{0x3800000, 0x80636d24, 0x1398437, 0x1398437, 0x3800080}, +{0x3800000, 0x80636d24, 0xba98d27, 0xba98d27, 0x3800080}, +{0x3800000, 0x80636d24, 0xba98d7a, 0xba98d7a, 0x3800080}, +{0x3800000, 0x80636d24, 0x751f853a, 0x751f853a, 0x3800080}, +{0x3800000, 0x80636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x80636d24, 0x7f7fffff, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x80636d24, 0x7f800000, 0x7f800000, 0x3800080}, +{0x3800000, 0x80636d24, 0x7f800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80636d24, 0x7f984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80636d24, 0x7fbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80636d24, 0x7fc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80636d24, 0x7fd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80636d24, 0x7fffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80636d24, 0x80000000, 0x80000000, 0x3800080}, +{0x3800000, 0x80636d24, 0x80000001, 0x0, 0x3800080}, +{0x3800000, 0x80636d24, 0x80000076, 0x0, 0x3800080}, +{0x3800000, 0x80636d24, 0x80002b94, 0x0, 0x3800080}, +{0x3800000, 0x80636d24, 0x80636d24, 0x0, 0x3800080}, +{0x3800000, 0x80636d24, 0x807fffff, 0x0, 0x3800080}, +{0x3800000, 0x80636d24, 0x80800000, 0x80800000, 0x3800080}, +{0x3800000, 0x80636d24, 0x80800002, 0x80800002, 0x3800080}, +{0x3800000, 0x80636d24, 0x81398437, 0x81398437, 0x3800080}, +{0x3800000, 0x80636d24, 0x8ba98d27, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x80636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x80636d24, 0xf51f853a, 0xf51f853a, 0x3800080}, +{0x3800000, 0x80636d24, 0xff7ffff0, 0xff7ffff0, 0x3800080}, +{0x3800000, 0x80636d24, 0xff7fffff, 0xff7fffff, 0x3800080}, +{0x3800000, 0x80636d24, 0xff800000, 0xff800000, 0x3800080}, +{0x3800000, 0x80636d24, 0xff800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80636d24, 0xff984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80636d24, 0xffbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x80636d24, 0xffc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80636d24, 0xffd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80636d24, 0xffffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x80636d24, 0x4f3495cb, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x80636d24, 0xe73a5134, 0xe73a5134, 0x3800080}, +{0x3800000, 0x80636d24, 0x7c994e9e, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x80636d24, 0x6164bd6c, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x80636d24, 0x9503366, 0x9503366, 0x3800080}, +{0x3800000, 0x80636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0x80636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0x80636d24, 0x77f31e2f, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x80636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0x80636d24, 0x966320b, 0x966320b, 0x3800080}, +{0x3800000, 0x80636d24, 0xb26bddee, 0xb26bddee, 0x3800080}, +{0x3800000, 0x80636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0x80636d24, 0x317285d3, 0x317285d3, 0x3800080}, +{0x3800000, 0x80636d24, 0x3c9623b1, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x80636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x80636d24, 0x7b906a6c, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x807fffff, 0x0, 0x0, 0x3800080}, +{0x3800000, 0x807fffff, 0x1, 0x0, 0x3800080}, +{0x3800000, 0x807fffff, 0x76, 0x0, 0x3800080}, +{0x3800000, 0x807fffff, 0x2b94, 0x0, 0x3800080}, +{0x3800000, 0x807fffff, 0x636d24, 0x0, 0x3800080}, +{0x3800000, 0x807fffff, 0x7fffff, 0x0, 0x3800080}, +{0x3800000, 0x807fffff, 0x800000, 0x800000, 0x3800080}, +{0x3800000, 0x807fffff, 0x800002, 0x800002, 0x3800080}, +{0x3800000, 0x807fffff, 0x1398437, 0x1398437, 0x3800080}, +{0x3800000, 0x807fffff, 0xba98d27, 0xba98d27, 0x3800080}, +{0x3800000, 0x807fffff, 0xba98d7a, 0xba98d7a, 0x3800080}, +{0x3800000, 0x807fffff, 0x751f853a, 0x751f853a, 0x3800080}, +{0x3800000, 0x807fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3800080}, +{0x3800000, 0x807fffff, 0x7f7fffff, 0x7f7fffff, 0x3800080}, +{0x3800000, 0x807fffff, 0x7f800000, 0x7f800000, 0x3800080}, +{0x3800000, 0x807fffff, 0x7f800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x807fffff, 0x7f984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x807fffff, 0x7fbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x807fffff, 0x7fc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x807fffff, 0x7fd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x807fffff, 0x7fffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x807fffff, 0x80000000, 0x80000000, 0x3800080}, +{0x3800000, 0x807fffff, 0x80000001, 0x0, 0x3800080}, +{0x3800000, 0x807fffff, 0x80000076, 0x0, 0x3800080}, +{0x3800000, 0x807fffff, 0x80002b94, 0x0, 0x3800080}, +{0x3800000, 0x807fffff, 0x80636d24, 0x0, 0x3800080}, +{0x3800000, 0x807fffff, 0x807fffff, 0x0, 0x3800080}, +{0x3800000, 0x807fffff, 0x80800000, 0x80800000, 0x3800080}, +{0x3800000, 0x807fffff, 0x80800002, 0x80800002, 0x3800080}, +{0x3800000, 0x807fffff, 0x81398437, 0x81398437, 0x3800080}, +{0x3800000, 0x807fffff, 0x8ba98d27, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x807fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x807fffff, 0xf51f853a, 0xf51f853a, 0x3800080}, +{0x3800000, 0x807fffff, 0xff7ffff0, 0xff7ffff0, 0x3800080}, +{0x3800000, 0x807fffff, 0xff7fffff, 0xff7fffff, 0x3800080}, +{0x3800000, 0x807fffff, 0xff800000, 0xff800000, 0x3800080}, +{0x3800000, 0x807fffff, 0xff800001, 0x7fc00000, 0x3800081}, +{0x3800000, 0x807fffff, 0xff984a37, 0x7fc00000, 0x3800081}, +{0x3800000, 0x807fffff, 0xffbfffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0x807fffff, 0xffc00000, 0x7fc00000, 0x3800080}, +{0x3800000, 0x807fffff, 0xffd9ba98, 0x7fc00000, 0x3800080}, +{0x3800000, 0x807fffff, 0xffffffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0x807fffff, 0x4f3495cb, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x807fffff, 0xe73a5134, 0xe73a5134, 0x3800080}, +{0x3800000, 0x807fffff, 0x7c994e9e, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x807fffff, 0x6164bd6c, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x807fffff, 0x9503366, 0x9503366, 0x3800080}, +{0x3800000, 0x807fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0x807fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0x807fffff, 0x77f31e2f, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x807fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0x807fffff, 0x966320b, 0x966320b, 0x3800080}, +{0x3800000, 0x807fffff, 0xb26bddee, 0xb26bddee, 0x3800080}, +{0x3800000, 0x807fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0x807fffff, 0x317285d3, 0x317285d3, 0x3800080}, +{0x3800000, 0x807fffff, 0x3c9623b1, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x807fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x807fffff, 0x7b906a6c, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x80800000, 0x0, 0x80800000, 0x3800000}, +{0x3800000, 0x80800000, 0x1, 0x80800000, 0x3800080}, +{0x3800000, 0x80800000, 0x76, 0x80800000, 0x3800080}, +{0x3800000, 0x80800000, 0x2b94, 0x80800000, 0x3800080}, +{0x3800000, 0x80800000, 0x636d24, 0x80800000, 0x3800080}, +{0x3800000, 0x80800000, 0x7fffff, 0x80800000, 0x3800080}, +{0x3800000, 0x80800000, 0x800000, 0x80000000, 0x3800000}, +{0x3800000, 0x80800000, 0x800002, 0x0, 0x3800008}, +{0x3800000, 0x80800000, 0x1398437, 0xf3086e, 0x3800000}, +{0x3800000, 0x80800000, 0xba98d27, 0xba98d25, 0x3800000}, +{0x3800000, 0x80800000, 0xba98d7a, 0xba98d78, 0x3800000}, +{0x3800000, 0x80800000, 0x751f853a, 0x751f8539, 0x3800010}, +{0x3800000, 0x80800000, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x80800000, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x80800000, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x80800000, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80800000, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80800000, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80800000, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80800000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80800000, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80800000, 0x80000000, 0x80800000, 0x3800000}, +{0x3800000, 0x80800000, 0x80000001, 0x80800000, 0x3800080}, +{0x3800000, 0x80800000, 0x80000076, 0x80800000, 0x3800080}, +{0x3800000, 0x80800000, 0x80002b94, 0x80800000, 0x3800080}, +{0x3800000, 0x80800000, 0x80636d24, 0x80800000, 0x3800080}, +{0x3800000, 0x80800000, 0x807fffff, 0x80800000, 0x3800080}, +{0x3800000, 0x80800000, 0x80800000, 0x81000000, 0x3800000}, +{0x3800000, 0x80800000, 0x80800002, 0x81000001, 0x3800000}, +{0x3800000, 0x80800000, 0x81398437, 0x81798437, 0x3800000}, +{0x3800000, 0x80800000, 0x8ba98d27, 0x8ba98d29, 0x3800000}, +{0x3800000, 0x80800000, 0x8ba98d7a, 0x8ba98d7c, 0x3800000}, +{0x3800000, 0x80800000, 0xf51f853a, 0xf51f853b, 0x3800010}, +{0x3800000, 0x80800000, 0xff7ffff0, 0xff7ffff1, 0x3800010}, +{0x3800000, 0x80800000, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0x80800000, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x80800000, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80800000, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80800000, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80800000, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80800000, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80800000, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80800000, 0x4f3495cb, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x80800000, 0xe73a5134, 0xe73a5135, 0x3800010}, +{0x3800000, 0x80800000, 0x7c994e9e, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x80800000, 0x6164bd6c, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x80800000, 0x9503366, 0x9503326, 0x3800000}, +{0x3800000, 0x80800000, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0x80800000, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0x80800000, 0x77f31e2f, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x80800000, 0xaab4d7d8, 0xaab4d7d9, 0x3800010}, +{0x3800000, 0x80800000, 0x966320b, 0x96631cb, 0x3800000}, +{0x3800000, 0x80800000, 0xb26bddee, 0xb26bddef, 0x3800010}, +{0x3800000, 0x80800000, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010}, +{0x3800000, 0x80800000, 0x317285d3, 0x317285d2, 0x3800010}, +{0x3800000, 0x80800000, 0x3c9623b1, 0x3c9623b0, 0x3800010}, +{0x3800000, 0x80800000, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x80800000, 0x7b906a6c, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x80800002, 0x0, 0x80800002, 0x3800000}, +{0x3800000, 0x80800002, 0x1, 0x80800002, 0x3800080}, +{0x3800000, 0x80800002, 0x76, 0x80800002, 0x3800080}, +{0x3800000, 0x80800002, 0x2b94, 0x80800002, 0x3800080}, +{0x3800000, 0x80800002, 0x636d24, 0x80800002, 0x3800080}, +{0x3800000, 0x80800002, 0x7fffff, 0x80800002, 0x3800080}, +{0x3800000, 0x80800002, 0x800000, 0x0, 0x3800008}, +{0x3800000, 0x80800002, 0x800002, 0x80000000, 0x3800000}, +{0x3800000, 0x80800002, 0x1398437, 0xf3086c, 0x3800000}, +{0x3800000, 0x80800002, 0xba98d27, 0xba98d24, 0x3800010}, +{0x3800000, 0x80800002, 0xba98d7a, 0xba98d77, 0x3800010}, +{0x3800000, 0x80800002, 0x751f853a, 0x751f8539, 0x3800010}, +{0x3800000, 0x80800002, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x80800002, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x80800002, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x80800002, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80800002, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80800002, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80800002, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80800002, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80800002, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80800002, 0x80000000, 0x80800002, 0x3800000}, +{0x3800000, 0x80800002, 0x80000001, 0x80800002, 0x3800080}, +{0x3800000, 0x80800002, 0x80000076, 0x80800002, 0x3800080}, +{0x3800000, 0x80800002, 0x80002b94, 0x80800002, 0x3800080}, +{0x3800000, 0x80800002, 0x80636d24, 0x80800002, 0x3800080}, +{0x3800000, 0x80800002, 0x807fffff, 0x80800002, 0x3800080}, +{0x3800000, 0x80800002, 0x80800000, 0x81000001, 0x3800000}, +{0x3800000, 0x80800002, 0x80800002, 0x81000002, 0x3800000}, +{0x3800000, 0x80800002, 0x81398437, 0x81798438, 0x3800000}, +{0x3800000, 0x80800002, 0x8ba98d27, 0x8ba98d2a, 0x3800010}, +{0x3800000, 0x80800002, 0x8ba98d7a, 0x8ba98d7d, 0x3800010}, +{0x3800000, 0x80800002, 0xf51f853a, 0xf51f853b, 0x3800010}, +{0x3800000, 0x80800002, 0xff7ffff0, 0xff7ffff1, 0x3800010}, +{0x3800000, 0x80800002, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0x80800002, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x80800002, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80800002, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80800002, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x80800002, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80800002, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80800002, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x80800002, 0x4f3495cb, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x80800002, 0xe73a5134, 0xe73a5135, 0x3800010}, +{0x3800000, 0x80800002, 0x7c994e9e, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x80800002, 0x6164bd6c, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x80800002, 0x9503366, 0x9503325, 0x3800010}, +{0x3800000, 0x80800002, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0x80800002, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0x80800002, 0x77f31e2f, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x80800002, 0xaab4d7d8, 0xaab4d7d9, 0x3800010}, +{0x3800000, 0x80800002, 0x966320b, 0x96631ca, 0x3800010}, +{0x3800000, 0x80800002, 0xb26bddee, 0xb26bddef, 0x3800010}, +{0x3800000, 0x80800002, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010}, +{0x3800000, 0x80800002, 0x317285d3, 0x317285d2, 0x3800010}, +{0x3800000, 0x80800002, 0x3c9623b1, 0x3c9623b0, 0x3800010}, +{0x3800000, 0x80800002, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x80800002, 0x7b906a6c, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x81398437, 0x0, 0x81398437, 0x3800000}, +{0x3800000, 0x81398437, 0x1, 0x81398437, 0x3800080}, +{0x3800000, 0x81398437, 0x76, 0x81398437, 0x3800080}, +{0x3800000, 0x81398437, 0x2b94, 0x81398437, 0x3800080}, +{0x3800000, 0x81398437, 0x636d24, 0x81398437, 0x3800080}, +{0x3800000, 0x81398437, 0x7fffff, 0x81398437, 0x3800080}, +{0x3800000, 0x81398437, 0x800000, 0x80f3086e, 0x3800000}, +{0x3800000, 0x81398437, 0x800002, 0x80f3086c, 0x3800000}, +{0x3800000, 0x81398437, 0x1398437, 0x80000000, 0x3800000}, +{0x3800000, 0x81398437, 0xba98d27, 0xba98d21, 0x3800010}, +{0x3800000, 0x81398437, 0xba98d7a, 0xba98d74, 0x3800010}, +{0x3800000, 0x81398437, 0x751f853a, 0x751f8539, 0x3800010}, +{0x3800000, 0x81398437, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x81398437, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x81398437, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x81398437, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x81398437, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x81398437, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x81398437, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x81398437, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x81398437, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x81398437, 0x80000000, 0x81398437, 0x3800000}, +{0x3800000, 0x81398437, 0x80000001, 0x81398437, 0x3800080}, +{0x3800000, 0x81398437, 0x80000076, 0x81398437, 0x3800080}, +{0x3800000, 0x81398437, 0x80002b94, 0x81398437, 0x3800080}, +{0x3800000, 0x81398437, 0x80636d24, 0x81398437, 0x3800080}, +{0x3800000, 0x81398437, 0x807fffff, 0x81398437, 0x3800080}, +{0x3800000, 0x81398437, 0x80800000, 0x81798437, 0x3800000}, +{0x3800000, 0x81398437, 0x80800002, 0x81798438, 0x3800000}, +{0x3800000, 0x81398437, 0x81398437, 0x81b98437, 0x3800000}, +{0x3800000, 0x81398437, 0x8ba98d27, 0x8ba98d2d, 0x3800010}, +{0x3800000, 0x81398437, 0x8ba98d7a, 0x8ba98d80, 0x3800010}, +{0x3800000, 0x81398437, 0xf51f853a, 0xf51f853b, 0x3800010}, +{0x3800000, 0x81398437, 0xff7ffff0, 0xff7ffff1, 0x3800010}, +{0x3800000, 0x81398437, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0x81398437, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x81398437, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x81398437, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x81398437, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x81398437, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x81398437, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x81398437, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x81398437, 0x4f3495cb, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x81398437, 0xe73a5134, 0xe73a5135, 0x3800010}, +{0x3800000, 0x81398437, 0x7c994e9e, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x81398437, 0x6164bd6c, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x81398437, 0x9503366, 0x95032ac, 0x3800010}, +{0x3800000, 0x81398437, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0x81398437, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0x81398437, 0x77f31e2f, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x81398437, 0xaab4d7d8, 0xaab4d7d9, 0x3800010}, +{0x3800000, 0x81398437, 0x966320b, 0x9663151, 0x3800010}, +{0x3800000, 0x81398437, 0xb26bddee, 0xb26bddef, 0x3800010}, +{0x3800000, 0x81398437, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010}, +{0x3800000, 0x81398437, 0x317285d3, 0x317285d2, 0x3800010}, +{0x3800000, 0x81398437, 0x3c9623b1, 0x3c9623b0, 0x3800010}, +{0x3800000, 0x81398437, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x81398437, 0x7b906a6c, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x0, 0x8ba98d27, 0x3800000}, +{0x3800000, 0x8ba98d27, 0x1, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x8ba98d27, 0x76, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x8ba98d27, 0x2b94, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x8ba98d27, 0x636d24, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x8ba98d27, 0x7fffff, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x8ba98d27, 0x800000, 0x8ba98d25, 0x3800000}, +{0x3800000, 0x8ba98d27, 0x800002, 0x8ba98d25, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x1398437, 0x8ba98d22, 0x3800010}, +{0x3800000, 0x8ba98d27, 0xba98d27, 0x80000000, 0x3800000}, +{0x3800000, 0x8ba98d27, 0xba98d7a, 0x3260000, 0x3800000}, +{0x3800000, 0x8ba98d27, 0x751f853a, 0x751f8539, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x8ba98d27, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x8ba98d27, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x8ba98d27, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x8ba98d27, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x8ba98d27, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x8ba98d27, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x8ba98d27, 0x80000000, 0x8ba98d27, 0x3800000}, +{0x3800000, 0x8ba98d27, 0x80000001, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x8ba98d27, 0x80000076, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x8ba98d27, 0x80002b94, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x8ba98d27, 0x80636d24, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x8ba98d27, 0x807fffff, 0x8ba98d27, 0x3800080}, +{0x3800000, 0x8ba98d27, 0x80800000, 0x8ba98d29, 0x3800000}, +{0x3800000, 0x8ba98d27, 0x80800002, 0x8ba98d2a, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x81398437, 0x8ba98d2d, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x8ba98d27, 0x8c298d27, 0x3800000}, +{0x3800000, 0x8ba98d27, 0x8ba98d7a, 0x8c298d51, 0x3800010}, +{0x3800000, 0x8ba98d27, 0xf51f853a, 0xf51f853b, 0x3800010}, +{0x3800000, 0x8ba98d27, 0xff7ffff0, 0xff7ffff1, 0x3800010}, +{0x3800000, 0x8ba98d27, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0x8ba98d27, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x8ba98d27, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x8ba98d27, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x8ba98d27, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x8ba98d27, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x8ba98d27, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x8ba98d27, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x8ba98d27, 0x4f3495cb, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x8ba98d27, 0xe73a5134, 0xe73a5135, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x7c994e9e, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x6164bd6c, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x9503366, 0x8ba30b8c, 0x3800010}, +{0x3800000, 0x8ba98d27, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0x8ba98d27, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x77f31e2f, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x8ba98d27, 0xaab4d7d8, 0xaab4d7d9, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x966320b, 0x8ba25b97, 0x3800010}, +{0x3800000, 0x8ba98d27, 0xb26bddee, 0xb26bddef, 0x3800010}, +{0x3800000, 0x8ba98d27, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x317285d3, 0x317285d2, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x3c9623b1, 0x3c9623b0, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x8ba98d27, 0x7b906a6c, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x0, 0x8ba98d7a, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0x1, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x8ba98d7a, 0x76, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x8ba98d7a, 0x2b94, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x8ba98d7a, 0x636d24, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x8ba98d7a, 0x7fffff, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x8ba98d7a, 0x800000, 0x8ba98d78, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0x800002, 0x8ba98d78, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x1398437, 0x8ba98d75, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0xba98d27, 0x83260000, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0xba98d7a, 0x80000000, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0x751f853a, 0x751f8539, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x8ba98d7a, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x8ba98d7a, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x8ba98d7a, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0x80000000, 0x8ba98d7a, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0x80000001, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x8ba98d7a, 0x80000076, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x8ba98d7a, 0x80002b94, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x8ba98d7a, 0x80636d24, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x8ba98d7a, 0x807fffff, 0x8ba98d7a, 0x3800080}, +{0x3800000, 0x8ba98d7a, 0x80800000, 0x8ba98d7c, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0x80800002, 0x8ba98d7d, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x81398437, 0x8ba98d80, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x8ba98d27, 0x8c298d51, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x8ba98d7a, 0x8c298d7a, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0xf51f853a, 0xf51f853b, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0xff7ffff0, 0xff7ffff1, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0x8ba98d7a, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x8ba98d7a, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x8ba98d7a, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x8ba98d7a, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x8ba98d7a, 0x4f3495cb, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0xe73a5134, 0xe73a5135, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x7c994e9e, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x6164bd6c, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x9503366, 0x8ba30bdf, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x77f31e2f, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0xaab4d7d8, 0xaab4d7d9, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x966320b, 0x8ba25bea, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0xb26bddee, 0xb26bddef, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0xb5c8e5d3, 0xb5c8e5d4, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x317285d3, 0x317285d2, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x3c9623b1, 0x3c9623b0, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x8ba98d7a, 0x7b906a6c, 0x7b906a6b, 0x3800010}, +{0x3800000, 0xf51f853a, 0x0, 0xf51f853a, 0x3800000}, +{0x3800000, 0xf51f853a, 0x1, 0xf51f853a, 0x3800080}, +{0x3800000, 0xf51f853a, 0x76, 0xf51f853a, 0x3800080}, +{0x3800000, 0xf51f853a, 0x2b94, 0xf51f853a, 0x3800080}, +{0x3800000, 0xf51f853a, 0x636d24, 0xf51f853a, 0x3800080}, +{0x3800000, 0xf51f853a, 0x7fffff, 0xf51f853a, 0x3800080}, +{0x3800000, 0xf51f853a, 0x800000, 0xf51f853a, 0x3800010}, +{0x3800000, 0xf51f853a, 0x800002, 0xf51f853a, 0x3800010}, +{0x3800000, 0xf51f853a, 0x1398437, 0xf51f853a, 0x3800010}, +{0x3800000, 0xf51f853a, 0xba98d27, 0xf51f853a, 0x3800010}, +{0x3800000, 0xf51f853a, 0xba98d7a, 0xf51f853a, 0x3800010}, +{0x3800000, 0xf51f853a, 0x751f853a, 0x80000000, 0x3800000}, +{0x3800000, 0xf51f853a, 0x7f7ffff0, 0x7f7fffe6, 0x3800010}, +{0x3800000, 0xf51f853a, 0x7f7fffff, 0x7f7ffff5, 0x3800010}, +{0x3800000, 0xf51f853a, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0xf51f853a, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xf51f853a, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xf51f853a, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xf51f853a, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xf51f853a, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xf51f853a, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xf51f853a, 0x80000000, 0xf51f853a, 0x3800000}, +{0x3800000, 0xf51f853a, 0x80000001, 0xf51f853a, 0x3800080}, +{0x3800000, 0xf51f853a, 0x80000076, 0xf51f853a, 0x3800080}, +{0x3800000, 0xf51f853a, 0x80002b94, 0xf51f853a, 0x3800080}, +{0x3800000, 0xf51f853a, 0x80636d24, 0xf51f853a, 0x3800080}, +{0x3800000, 0xf51f853a, 0x807fffff, 0xf51f853a, 0x3800080}, +{0x3800000, 0xf51f853a, 0x80800000, 0xf51f853b, 0x3800010}, +{0x3800000, 0xf51f853a, 0x80800002, 0xf51f853b, 0x3800010}, +{0x3800000, 0xf51f853a, 0x81398437, 0xf51f853b, 0x3800010}, +{0x3800000, 0xf51f853a, 0x8ba98d27, 0xf51f853b, 0x3800010}, +{0x3800000, 0xf51f853a, 0x8ba98d7a, 0xf51f853b, 0x3800010}, +{0x3800000, 0xf51f853a, 0xf51f853a, 0xf59f853a, 0x3800000}, +{0x3800000, 0xf51f853a, 0xff7ffff0, 0xff7ffffa, 0x3800010}, +{0x3800000, 0xf51f853a, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0xf51f853a, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0xf51f853a, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xf51f853a, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xf51f853a, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xf51f853a, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xf51f853a, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xf51f853a, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xf51f853a, 0x4f3495cb, 0xf51f853a, 0x3800010}, +{0x3800000, 0xf51f853a, 0xe73a5134, 0xf51f853b, 0x3800010}, +{0x3800000, 0xf51f853a, 0x7c994e9e, 0x7c994d5e, 0x3800010}, +{0x3800000, 0xf51f853a, 0x6164bd6c, 0xf51f853a, 0x3800010}, +{0x3800000, 0xf51f853a, 0x9503366, 0xf51f853a, 0x3800010}, +{0x3800000, 0xf51f853a, 0xbf5a97c9, 0xf51f853b, 0x3800010}, +{0x3800000, 0xf51f853a, 0xe6ff1a14, 0xf51f853b, 0x3800010}, +{0x3800000, 0xf51f853a, 0x77f31e2f, 0x77ee2205, 0x3800010}, +{0x3800000, 0xf51f853a, 0xaab4d7d8, 0xf51f853b, 0x3800010}, +{0x3800000, 0xf51f853a, 0x966320b, 0xf51f853a, 0x3800010}, +{0x3800000, 0xf51f853a, 0xb26bddee, 0xf51f853b, 0x3800010}, +{0x3800000, 0xf51f853a, 0xb5c8e5d3, 0xf51f853b, 0x3800010}, +{0x3800000, 0xf51f853a, 0x317285d3, 0xf51f853a, 0x3800010}, +{0x3800000, 0xf51f853a, 0x3c9623b1, 0xf51f853a, 0x3800010}, +{0x3800000, 0xf51f853a, 0x51fd2c7c, 0xf51f853a, 0x3800010}, +{0x3800000, 0xf51f853a, 0x7b906a6c, 0x7b90656f, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x0, 0xff7ffff0, 0x3800000}, +{0x3800000, 0xff7ffff0, 0x1, 0xff7ffff0, 0x3800080}, +{0x3800000, 0xff7ffff0, 0x76, 0xff7ffff0, 0x3800080}, +{0x3800000, 0xff7ffff0, 0x2b94, 0xff7ffff0, 0x3800080}, +{0x3800000, 0xff7ffff0, 0x636d24, 0xff7ffff0, 0x3800080}, +{0x3800000, 0xff7ffff0, 0x7fffff, 0xff7ffff0, 0x3800080}, +{0x3800000, 0xff7ffff0, 0x800000, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x800002, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x1398437, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xff7ffff0, 0xba98d27, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xff7ffff0, 0xba98d7a, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x751f853a, 0xff7fffe7, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x7f7ffff0, 0x80000000, 0x3800000}, +{0x3800000, 0xff7ffff0, 0x7f7fffff, 0x75700000, 0x3800000}, +{0x3800000, 0xff7ffff0, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0xff7ffff0, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff7ffff0, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff7ffff0, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff7ffff0, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff7ffff0, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff7ffff0, 0x80000000, 0xff7ffff0, 0x3800000}, +{0x3800000, 0xff7ffff0, 0x80000001, 0xff7ffff0, 0x3800080}, +{0x3800000, 0xff7ffff0, 0x80000076, 0xff7ffff0, 0x3800080}, +{0x3800000, 0xff7ffff0, 0x80002b94, 0xff7ffff0, 0x3800080}, +{0x3800000, 0xff7ffff0, 0x80636d24, 0xff7ffff0, 0x3800080}, +{0x3800000, 0xff7ffff0, 0x807fffff, 0xff7ffff0, 0x3800080}, +{0x3800000, 0xff7ffff0, 0x80800000, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x80800002, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x81398437, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x8ba98d27, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x8ba98d7a, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xff7ffff0, 0xf51f853a, 0xff7ffffa, 0x3800010}, +{0x3800000, 0xff7ffff0, 0xff7ffff0, 0xff800000, 0x3800014}, +{0x3800000, 0xff7ffff0, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0xff7ffff0, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0xff7ffff0, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff7ffff0, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff7ffff0, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff7ffff0, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff7ffff0, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff7ffff0, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff7ffff0, 0x4f3495cb, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xff7ffff0, 0xe73a5134, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x7c994e9e, 0xff7b357c, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x6164bd6c, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x9503366, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xff7ffff0, 0xbf5a97c9, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xff7ffff0, 0xe6ff1a14, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x77f31e2f, 0xff7ffe0a, 0x3800010}, +{0x3800000, 0xff7ffff0, 0xaab4d7d8, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x966320b, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xff7ffff0, 0xb26bddee, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xff7ffff0, 0xb5c8e5d3, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x317285d3, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x3c9623b1, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x51fd2c7c, 0xff7ffff0, 0x3800010}, +{0x3800000, 0xff7ffff0, 0x7b906a6c, 0xff7edf1c, 0x3800010}, +{0x3800000, 0xff7fffff, 0x0, 0xff7fffff, 0x3800000}, +{0x3800000, 0xff7fffff, 0x1, 0xff7fffff, 0x3800080}, +{0x3800000, 0xff7fffff, 0x76, 0xff7fffff, 0x3800080}, +{0x3800000, 0xff7fffff, 0x2b94, 0xff7fffff, 0x3800080}, +{0x3800000, 0xff7fffff, 0x636d24, 0xff7fffff, 0x3800080}, +{0x3800000, 0xff7fffff, 0x7fffff, 0xff7fffff, 0x3800080}, +{0x3800000, 0xff7fffff, 0x800000, 0xff7fffff, 0x3800010}, +{0x3800000, 0xff7fffff, 0x800002, 0xff7fffff, 0x3800010}, +{0x3800000, 0xff7fffff, 0x1398437, 0xff7fffff, 0x3800010}, +{0x3800000, 0xff7fffff, 0xba98d27, 0xff7fffff, 0x3800010}, +{0x3800000, 0xff7fffff, 0xba98d7a, 0xff7fffff, 0x3800010}, +{0x3800000, 0xff7fffff, 0x751f853a, 0xff7ffff6, 0x3800010}, +{0x3800000, 0xff7fffff, 0x7f7ffff0, 0xf5700000, 0x3800000}, +{0x3800000, 0xff7fffff, 0x7f7fffff, 0x80000000, 0x3800000}, +{0x3800000, 0xff7fffff, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0xff7fffff, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff7fffff, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff7fffff, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff7fffff, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff7fffff, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff7fffff, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff7fffff, 0x80000000, 0xff7fffff, 0x3800000}, +{0x3800000, 0xff7fffff, 0x80000001, 0xff7fffff, 0x3800080}, +{0x3800000, 0xff7fffff, 0x80000076, 0xff7fffff, 0x3800080}, +{0x3800000, 0xff7fffff, 0x80002b94, 0xff7fffff, 0x3800080}, +{0x3800000, 0xff7fffff, 0x80636d24, 0xff7fffff, 0x3800080}, +{0x3800000, 0xff7fffff, 0x807fffff, 0xff7fffff, 0x3800080}, +{0x3800000, 0xff7fffff, 0x80800000, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0x80800002, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0x81398437, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0x8ba98d27, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0x8ba98d7a, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0xf51f853a, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0xff7ffff0, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0xff7fffff, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff7fffff, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff7fffff, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff7fffff, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff7fffff, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff7fffff, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff7fffff, 0x4f3495cb, 0xff7fffff, 0x3800010}, +{0x3800000, 0xff7fffff, 0xe73a5134, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0x7c994e9e, 0xff7b358b, 0x3800010}, +{0x3800000, 0xff7fffff, 0x6164bd6c, 0xff7fffff, 0x3800010}, +{0x3800000, 0xff7fffff, 0x9503366, 0xff7fffff, 0x3800010}, +{0x3800000, 0xff7fffff, 0xbf5a97c9, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0xe6ff1a14, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0x77f31e2f, 0xff7ffe19, 0x3800010}, +{0x3800000, 0xff7fffff, 0xaab4d7d8, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0x966320b, 0xff7fffff, 0x3800010}, +{0x3800000, 0xff7fffff, 0xb26bddee, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0xb5c8e5d3, 0xff800000, 0x3800014}, +{0x3800000, 0xff7fffff, 0x317285d3, 0xff7fffff, 0x3800010}, +{0x3800000, 0xff7fffff, 0x3c9623b1, 0xff7fffff, 0x3800010}, +{0x3800000, 0xff7fffff, 0x51fd2c7c, 0xff7fffff, 0x3800010}, +{0x3800000, 0xff7fffff, 0x7b906a6c, 0xff7edf2b, 0x3800010}, +{0x3800000, 0xff800000, 0x0, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x1, 0xff800000, 0x3800080}, +{0x3800000, 0xff800000, 0x76, 0xff800000, 0x3800080}, +{0x3800000, 0xff800000, 0x2b94, 0xff800000, 0x3800080}, +{0x3800000, 0xff800000, 0x636d24, 0xff800000, 0x3800080}, +{0x3800000, 0xff800000, 0x7fffff, 0xff800000, 0x3800080}, +{0x3800000, 0xff800000, 0x800000, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x800002, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x1398437, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xba98d27, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xba98d7a, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x751f853a, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x7f7ffff0, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x7f7fffff, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x7f800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800000, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800000, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800000, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800000, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff800000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff800000, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff800000, 0x80000000, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x80000001, 0xff800000, 0x3800080}, +{0x3800000, 0xff800000, 0x80000076, 0xff800000, 0x3800080}, +{0x3800000, 0xff800000, 0x80002b94, 0xff800000, 0x3800080}, +{0x3800000, 0xff800000, 0x80636d24, 0xff800000, 0x3800080}, +{0x3800000, 0xff800000, 0x807fffff, 0xff800000, 0x3800080}, +{0x3800000, 0xff800000, 0x80800000, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x80800002, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x81398437, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x8ba98d27, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x8ba98d7a, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xf51f853a, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xff7ffff0, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xff7fffff, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800000, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800000, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800000, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff800000, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff800000, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xff800000, 0x4f3495cb, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xe73a5134, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x7c994e9e, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x6164bd6c, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x9503366, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xbf5a97c9, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xe6ff1a14, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x77f31e2f, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xaab4d7d8, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x966320b, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xb26bddee, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0xb5c8e5d3, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x317285d3, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x3c9623b1, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x51fd2c7c, 0xff800000, 0x3800000}, +{0x3800000, 0xff800000, 0x7b906a6c, 0xff800000, 0x3800000}, +{0x3800000, 0xff800001, 0x0, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x1, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff800001, 0x76, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff800001, 0x2b94, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff800001, 0x636d24, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff800001, 0x7fffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff800001, 0x800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x800002, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x1398437, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xba98d27, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xba98d7a, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x751f853a, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x7f7ffff0, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x7f7fffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x7f800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x7fc00000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x7fd9ba98, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x7fffffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x80000000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x80000001, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff800001, 0x80000076, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff800001, 0x80002b94, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff800001, 0x80636d24, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff800001, 0x807fffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff800001, 0x80800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x80800002, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x81398437, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x8ba98d27, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x8ba98d7a, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xf51f853a, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xff7ffff0, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xff7fffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xff800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xffc00000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xffd9ba98, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xffffffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x4f3495cb, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xe73a5134, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x7c994e9e, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x6164bd6c, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x9503366, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xbf5a97c9, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xe6ff1a14, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x77f31e2f, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xaab4d7d8, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x966320b, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xb26bddee, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0xb5c8e5d3, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x317285d3, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x3c9623b1, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x51fd2c7c, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff800001, 0x7b906a6c, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x0, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x1, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff984a37, 0x76, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff984a37, 0x2b94, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff984a37, 0x636d24, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff984a37, 0x7fffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff984a37, 0x800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x800002, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x1398437, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xba98d27, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xba98d7a, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x751f853a, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x7f7ffff0, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x7f7fffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x7f800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x7fc00000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x7fd9ba98, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x7fffffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x80000000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x80000001, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff984a37, 0x80000076, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff984a37, 0x80002b94, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff984a37, 0x80636d24, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff984a37, 0x807fffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0xff984a37, 0x80800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x80800002, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x81398437, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x8ba98d27, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x8ba98d7a, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xf51f853a, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xff7ffff0, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xff7fffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xff800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xffc00000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xffd9ba98, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xffffffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x4f3495cb, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xe73a5134, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x7c994e9e, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x6164bd6c, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x9503366, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xbf5a97c9, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xe6ff1a14, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x77f31e2f, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xaab4d7d8, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x966320b, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xb26bddee, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0xb5c8e5d3, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x317285d3, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x3c9623b1, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x51fd2c7c, 0x7fc00000, 0x3800001}, +{0x3800000, 0xff984a37, 0x7b906a6c, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x0, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x1, 0x7fc00000, 0x3800081}, +{0x3800000, 0xffbfffff, 0x76, 0x7fc00000, 0x3800081}, +{0x3800000, 0xffbfffff, 0x2b94, 0x7fc00000, 0x3800081}, +{0x3800000, 0xffbfffff, 0x636d24, 0x7fc00000, 0x3800081}, +{0x3800000, 0xffbfffff, 0x7fffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0xffbfffff, 0x800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x800002, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x1398437, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xba98d27, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xba98d7a, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x751f853a, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x7f7ffff0, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x7f7fffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x7f800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x7fc00000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x7fd9ba98, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x7fffffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x80000000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x80000001, 0x7fc00000, 0x3800081}, +{0x3800000, 0xffbfffff, 0x80000076, 0x7fc00000, 0x3800081}, +{0x3800000, 0xffbfffff, 0x80002b94, 0x7fc00000, 0x3800081}, +{0x3800000, 0xffbfffff, 0x80636d24, 0x7fc00000, 0x3800081}, +{0x3800000, 0xffbfffff, 0x807fffff, 0x7fc00000, 0x3800081}, +{0x3800000, 0xffbfffff, 0x80800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x80800002, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x81398437, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x8ba98d27, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x8ba98d7a, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xf51f853a, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xff7ffff0, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xff7fffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xff800000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xffc00000, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xffd9ba98, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xffffffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x4f3495cb, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xe73a5134, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x7c994e9e, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x6164bd6c, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x9503366, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xbf5a97c9, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xe6ff1a14, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x77f31e2f, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xaab4d7d8, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x966320b, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xb26bddee, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x317285d3, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x3c9623b1, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x51fd2c7c, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffbfffff, 0x7b906a6c, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffc00000, 0x0, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x1, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffc00000, 0x76, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffc00000, 0x2b94, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffc00000, 0x636d24, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffc00000, 0x7fffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffc00000, 0x800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x800002, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x1398437, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xba98d27, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xba98d7a, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x751f853a, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x7f7ffff0, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x7f7fffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x7f800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffc00000, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffc00000, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffc00000, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x80000000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x80000001, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffc00000, 0x80000076, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffc00000, 0x80002b94, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffc00000, 0x80636d24, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffc00000, 0x807fffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffc00000, 0x80800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x80800002, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x81398437, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x8ba98d27, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x8ba98d7a, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xf51f853a, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xff7ffff0, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xff7fffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xff800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffc00000, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffc00000, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffc00000, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x4f3495cb, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xe73a5134, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x7c994e9e, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x6164bd6c, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x9503366, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xbf5a97c9, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xe6ff1a14, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x77f31e2f, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xaab4d7d8, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x966320b, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xb26bddee, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0xb5c8e5d3, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x317285d3, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x3c9623b1, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x51fd2c7c, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffc00000, 0x7b906a6c, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x0, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x1, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffd9ba98, 0x76, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffd9ba98, 0x2b94, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffd9ba98, 0x636d24, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffd9ba98, 0x7fffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffd9ba98, 0x800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x800002, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x1398437, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xba98d27, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xba98d7a, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x751f853a, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x7f7fffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x7f800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffd9ba98, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffd9ba98, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffd9ba98, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x80000000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x80000001, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffd9ba98, 0x80000076, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffd9ba98, 0x80002b94, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffd9ba98, 0x80636d24, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffd9ba98, 0x807fffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffd9ba98, 0x80800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x80800002, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x81398437, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x8ba98d27, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xf51f853a, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xff7ffff0, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xff7fffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xff800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffd9ba98, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffd9ba98, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffd9ba98, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x4f3495cb, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xe73a5134, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x7c994e9e, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x6164bd6c, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x9503366, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x77f31e2f, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x966320b, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xb26bddee, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x317285d3, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x3c9623b1, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffd9ba98, 0x7b906a6c, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x0, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x1, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffffffff, 0x76, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffffffff, 0x2b94, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffffffff, 0x636d24, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffffffff, 0x7fffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffffffff, 0x800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x800002, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x1398437, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xba98d27, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xba98d7a, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x751f853a, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x7f7ffff0, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x7f7fffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x7f800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffffffff, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffffffff, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffffffff, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x80000000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x80000001, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffffffff, 0x80000076, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffffffff, 0x80002b94, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffffffff, 0x80636d24, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffffffff, 0x807fffff, 0x7fc00000, 0x3800080}, +{0x3800000, 0xffffffff, 0x80800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x80800002, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x81398437, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x8ba98d27, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x8ba98d7a, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xf51f853a, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xff7ffff0, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xff7fffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xff800000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffffffff, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffffffff, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xffffffff, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x4f3495cb, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xe73a5134, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x7c994e9e, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x6164bd6c, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x9503366, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xbf5a97c9, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xe6ff1a14, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x77f31e2f, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xaab4d7d8, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x966320b, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xb26bddee, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0xb5c8e5d3, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x317285d3, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x3c9623b1, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x51fd2c7c, 0x7fc00000, 0x3800000}, +{0x3800000, 0xffffffff, 0x7b906a6c, 0x7fc00000, 0x3800000}, +{0x3800000, 0x4f3495cb, 0x0, 0x4f3495cb, 0x3800000}, +{0x3800000, 0x4f3495cb, 0x1, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x4f3495cb, 0x76, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x4f3495cb, 0x2b94, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x4f3495cb, 0x636d24, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x4f3495cb, 0x7fffff, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x4f3495cb, 0x800000, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x800002, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x1398437, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x4f3495cb, 0xba98d27, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x4f3495cb, 0xba98d7a, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x751f853a, 0x751f853a, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x7f7fffff, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x4f3495cb, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x4f3495cb, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x4f3495cb, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x4f3495cb, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x4f3495cb, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x4f3495cb, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x4f3495cb, 0x80000000, 0x4f3495cb, 0x3800000}, +{0x3800000, 0x4f3495cb, 0x80000001, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x4f3495cb, 0x80000076, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x4f3495cb, 0x80002b94, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x4f3495cb, 0x80636d24, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x4f3495cb, 0x807fffff, 0x4f3495cb, 0x3800080}, +{0x3800000, 0x4f3495cb, 0x80800000, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x80800002, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x81398437, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x8ba98d27, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x8ba98d7a, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x4f3495cb, 0xf51f853a, 0xf51f853a, 0x3800010}, +{0x3800000, 0x4f3495cb, 0xff7ffff0, 0xff7ffff0, 0x3800010}, +{0x3800000, 0x4f3495cb, 0xff7fffff, 0xff7fffff, 0x3800010}, +{0x3800000, 0x4f3495cb, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x4f3495cb, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x4f3495cb, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x4f3495cb, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x4f3495cb, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x4f3495cb, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x4f3495cb, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x4f3495cb, 0x4f3495cb, 0x4fb495cb, 0x3800000}, +{0x3800000, 0x4f3495cb, 0xe73a5134, 0xe73a5134, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x7c994e9e, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x6164bd6c, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x9503366, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x4f3495cb, 0xbf5a97c9, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x4f3495cb, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x77f31e2f, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x4f3495cb, 0xaab4d7d8, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x966320b, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x4f3495cb, 0xb26bddee, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x4f3495cb, 0xb5c8e5d3, 0x4f3495ca, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x317285d3, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x3c9623b1, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x51fd2c7c, 0x52016895, 0x3800010}, +{0x3800000, 0x4f3495cb, 0x7b906a6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0xe73a5134, 0x0, 0xe73a5134, 0x3800000}, +{0x3800000, 0xe73a5134, 0x1, 0xe73a5134, 0x3800080}, +{0x3800000, 0xe73a5134, 0x76, 0xe73a5134, 0x3800080}, +{0x3800000, 0xe73a5134, 0x2b94, 0xe73a5134, 0x3800080}, +{0x3800000, 0xe73a5134, 0x636d24, 0xe73a5134, 0x3800080}, +{0x3800000, 0xe73a5134, 0x7fffff, 0xe73a5134, 0x3800080}, +{0x3800000, 0xe73a5134, 0x800000, 0xe73a5134, 0x3800010}, +{0x3800000, 0xe73a5134, 0x800002, 0xe73a5134, 0x3800010}, +{0x3800000, 0xe73a5134, 0x1398437, 0xe73a5134, 0x3800010}, +{0x3800000, 0xe73a5134, 0xba98d27, 0xe73a5134, 0x3800010}, +{0x3800000, 0xe73a5134, 0xba98d7a, 0xe73a5134, 0x3800010}, +{0x3800000, 0xe73a5134, 0x751f853a, 0x751f8539, 0x3800010}, +{0x3800000, 0xe73a5134, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, +{0x3800000, 0xe73a5134, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0xe73a5134, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0xe73a5134, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xe73a5134, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xe73a5134, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xe73a5134, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xe73a5134, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xe73a5134, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xe73a5134, 0x80000000, 0xe73a5134, 0x3800000}, +{0x3800000, 0xe73a5134, 0x80000001, 0xe73a5134, 0x3800080}, +{0x3800000, 0xe73a5134, 0x80000076, 0xe73a5134, 0x3800080}, +{0x3800000, 0xe73a5134, 0x80002b94, 0xe73a5134, 0x3800080}, +{0x3800000, 0xe73a5134, 0x80636d24, 0xe73a5134, 0x3800080}, +{0x3800000, 0xe73a5134, 0x807fffff, 0xe73a5134, 0x3800080}, +{0x3800000, 0xe73a5134, 0x80800000, 0xe73a5135, 0x3800010}, +{0x3800000, 0xe73a5134, 0x80800002, 0xe73a5135, 0x3800010}, +{0x3800000, 0xe73a5134, 0x81398437, 0xe73a5135, 0x3800010}, +{0x3800000, 0xe73a5134, 0x8ba98d27, 0xe73a5135, 0x3800010}, +{0x3800000, 0xe73a5134, 0x8ba98d7a, 0xe73a5135, 0x3800010}, +{0x3800000, 0xe73a5134, 0xf51f853a, 0xf51f853b, 0x3800010}, +{0x3800000, 0xe73a5134, 0xff7ffff0, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xe73a5134, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0xe73a5134, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0xe73a5134, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xe73a5134, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xe73a5134, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xe73a5134, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xe73a5134, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xe73a5134, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xe73a5134, 0x4f3495cb, 0xe73a5134, 0x3800010}, +{0x3800000, 0xe73a5134, 0xe73a5134, 0xe7ba5134, 0x3800000}, +{0x3800000, 0xe73a5134, 0x7c994e9e, 0x7c994e9d, 0x3800010}, +{0x3800000, 0xe73a5134, 0x6164bd6c, 0xe73a42e9, 0x3800010}, +{0x3800000, 0xe73a5134, 0x9503366, 0xe73a5134, 0x3800010}, +{0x3800000, 0xe73a5134, 0xbf5a97c9, 0xe73a5135, 0x3800010}, +{0x3800000, 0xe73a5134, 0xe6ff1a14, 0xe79cef1f, 0x3800000}, +{0x3800000, 0xe73a5134, 0x77f31e2f, 0x77f31e2e, 0x3800010}, +{0x3800000, 0xe73a5134, 0xaab4d7d8, 0xe73a5135, 0x3800010}, +{0x3800000, 0xe73a5134, 0x966320b, 0xe73a5134, 0x3800010}, +{0x3800000, 0xe73a5134, 0xb26bddee, 0xe73a5135, 0x3800010}, +{0x3800000, 0xe73a5134, 0xb5c8e5d3, 0xe73a5135, 0x3800010}, +{0x3800000, 0xe73a5134, 0x317285d3, 0xe73a5134, 0x3800010}, +{0x3800000, 0xe73a5134, 0x3c9623b1, 0xe73a5134, 0x3800010}, +{0x3800000, 0xe73a5134, 0x51fd2c7c, 0xe73a5134, 0x3800010}, +{0x3800000, 0xe73a5134, 0x7b906a6c, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x0, 0x7c994e9e, 0x3800000}, +{0x3800000, 0x7c994e9e, 0x1, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x7c994e9e, 0x76, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x7c994e9e, 0x2b94, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x7c994e9e, 0x636d24, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x7c994e9e, 0x7fffff, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x7c994e9e, 0x800000, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x800002, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x1398437, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0xba98d27, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0xba98d7a, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x751f853a, 0x7c994fdd, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x7f7ffff0, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7c994e9e, 0x7f7fffff, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7c994e9e, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x7c994e9e, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7c994e9e, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7c994e9e, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7c994e9e, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7c994e9e, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7c994e9e, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7c994e9e, 0x80000000, 0x7c994e9e, 0x3800000}, +{0x3800000, 0x7c994e9e, 0x80000001, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x7c994e9e, 0x80000076, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x7c994e9e, 0x80002b94, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x7c994e9e, 0x80636d24, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x7c994e9e, 0x807fffff, 0x7c994e9e, 0x3800080}, +{0x3800000, 0x7c994e9e, 0x80800000, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x80800002, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x81398437, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x8ba98d27, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x8ba98d7a, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x7c994e9e, 0xf51f853a, 0x7c994d5e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0xff7ffff0, 0xff7b357c, 0x3800010}, +{0x3800000, 0x7c994e9e, 0xff7fffff, 0xff7b358b, 0x3800010}, +{0x3800000, 0x7c994e9e, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x7c994e9e, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7c994e9e, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7c994e9e, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7c994e9e, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7c994e9e, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7c994e9e, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7c994e9e, 0x4f3495cb, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0xe73a5134, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x7c994e9e, 0x7d194e9e, 0x3800000}, +{0x3800000, 0x7c994e9e, 0x6164bd6c, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x9503366, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0xbf5a97c9, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x7c994e9e, 0xe6ff1a14, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x77f31e2f, 0x7c998b65, 0x3800010}, +{0x3800000, 0x7c994e9e, 0xaab4d7d8, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x966320b, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0xb26bddee, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x7c994e9e, 0xb5c8e5d3, 0x7c994e9d, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x317285d3, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x3c9623b1, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x51fd2c7c, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x7c994e9e, 0x7b906a6c, 0x7cbd6939, 0x3800000}, +{0x3800000, 0x6164bd6c, 0x0, 0x6164bd6c, 0x3800000}, +{0x3800000, 0x6164bd6c, 0x1, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x6164bd6c, 0x76, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x6164bd6c, 0x2b94, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x6164bd6c, 0x636d24, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x6164bd6c, 0x7fffff, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x6164bd6c, 0x800000, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x800002, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x1398437, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x6164bd6c, 0xba98d27, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x6164bd6c, 0xba98d7a, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x751f853a, 0x751f853a, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x7f7fffff, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x6164bd6c, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x6164bd6c, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x6164bd6c, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x6164bd6c, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x6164bd6c, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x6164bd6c, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x6164bd6c, 0x80000000, 0x6164bd6c, 0x3800000}, +{0x3800000, 0x6164bd6c, 0x80000001, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x6164bd6c, 0x80000076, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x6164bd6c, 0x80002b94, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x6164bd6c, 0x80636d24, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x6164bd6c, 0x807fffff, 0x6164bd6c, 0x3800080}, +{0x3800000, 0x6164bd6c, 0x80800000, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x80800002, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x81398437, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x8ba98d27, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x8ba98d7a, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x6164bd6c, 0xf51f853a, 0xf51f853a, 0x3800010}, +{0x3800000, 0x6164bd6c, 0xff7ffff0, 0xff7ffff0, 0x3800010}, +{0x3800000, 0x6164bd6c, 0xff7fffff, 0xff7fffff, 0x3800010}, +{0x3800000, 0x6164bd6c, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x6164bd6c, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x6164bd6c, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x6164bd6c, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x6164bd6c, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x6164bd6c, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x6164bd6c, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x6164bd6c, 0x4f3495cb, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x6164bd6c, 0xe73a5134, 0xe73a42e9, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x7c994e9e, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x6164bd6c, 0x61e4bd6c, 0x3800000}, +{0x3800000, 0x6164bd6c, 0x9503366, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x6164bd6c, 0xbf5a97c9, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x6164bd6c, 0xe6ff1a14, 0xe6fefd7d, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x77f31e2f, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x6164bd6c, 0xaab4d7d8, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x966320b, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x6164bd6c, 0xb26bddee, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x6164bd6c, 0xb5c8e5d3, 0x6164bd6b, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x317285d3, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x3c9623b1, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x51fd2c7c, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x6164bd6c, 0x7b906a6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x9503366, 0x0, 0x9503366, 0x3800000}, +{0x3800000, 0x9503366, 0x1, 0x9503366, 0x3800080}, +{0x3800000, 0x9503366, 0x76, 0x9503366, 0x3800080}, +{0x3800000, 0x9503366, 0x2b94, 0x9503366, 0x3800080}, +{0x3800000, 0x9503366, 0x636d24, 0x9503366, 0x3800080}, +{0x3800000, 0x9503366, 0x7fffff, 0x9503366, 0x3800080}, +{0x3800000, 0x9503366, 0x800000, 0x95033a6, 0x3800000}, +{0x3800000, 0x9503366, 0x800002, 0x95033a6, 0x3800010}, +{0x3800000, 0x9503366, 0x1398437, 0x950341f, 0x3800010}, +{0x3800000, 0x9503366, 0xba98d27, 0xbb00ec2, 0x3800010}, +{0x3800000, 0x9503366, 0xba98d7a, 0xbb00f15, 0x3800010}, +{0x3800000, 0x9503366, 0x751f853a, 0x751f853a, 0x3800010}, +{0x3800000, 0x9503366, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x9503366, 0x7f7fffff, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x9503366, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x9503366, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x9503366, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x9503366, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x9503366, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x9503366, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x9503366, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x9503366, 0x80000000, 0x9503366, 0x3800000}, +{0x3800000, 0x9503366, 0x80000001, 0x9503366, 0x3800080}, +{0x3800000, 0x9503366, 0x80000076, 0x9503366, 0x3800080}, +{0x3800000, 0x9503366, 0x80002b94, 0x9503366, 0x3800080}, +{0x3800000, 0x9503366, 0x80636d24, 0x9503366, 0x3800080}, +{0x3800000, 0x9503366, 0x807fffff, 0x9503366, 0x3800080}, +{0x3800000, 0x9503366, 0x80800000, 0x9503326, 0x3800000}, +{0x3800000, 0x9503366, 0x80800002, 0x9503325, 0x3800010}, +{0x3800000, 0x9503366, 0x81398437, 0x95032ac, 0x3800010}, +{0x3800000, 0x9503366, 0x8ba98d27, 0x8ba30b8c, 0x3800010}, +{0x3800000, 0x9503366, 0x8ba98d7a, 0x8ba30bdf, 0x3800010}, +{0x3800000, 0x9503366, 0xf51f853a, 0xf51f853a, 0x3800010}, +{0x3800000, 0x9503366, 0xff7ffff0, 0xff7ffff0, 0x3800010}, +{0x3800000, 0x9503366, 0xff7fffff, 0xff7fffff, 0x3800010}, +{0x3800000, 0x9503366, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x9503366, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x9503366, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x9503366, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x9503366, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x9503366, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x9503366, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x9503366, 0x4f3495cb, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x9503366, 0xe73a5134, 0xe73a5134, 0x3800010}, +{0x3800000, 0x9503366, 0x7c994e9e, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x9503366, 0x6164bd6c, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x9503366, 0x9503366, 0x9d03366, 0x3800000}, +{0x3800000, 0x9503366, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0x9503366, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0x9503366, 0x77f31e2f, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x9503366, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0x9503366, 0x966320b, 0x9db32b8, 0x3800010}, +{0x3800000, 0x9503366, 0xb26bddee, 0xb26bddee, 0x3800010}, +{0x3800000, 0x9503366, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0x9503366, 0x317285d3, 0x317285d3, 0x3800010}, +{0x3800000, 0x9503366, 0x3c9623b1, 0x3c9623b1, 0x3800010}, +{0x3800000, 0x9503366, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x9503366, 0x7b906a6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x0, 0xbf5a97c9, 0x3800000}, +{0x3800000, 0xbf5a97c9, 0x1, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0xbf5a97c9, 0x76, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0xbf5a97c9, 0x2b94, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0xbf5a97c9, 0x636d24, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0xbf5a97c9, 0x7fffff, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0xbf5a97c9, 0x800000, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x800002, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x1398437, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0xba98d27, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0xba98d7a, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x751f853a, 0x751f8539, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0xbf5a97c9, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xbf5a97c9, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xbf5a97c9, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xbf5a97c9, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xbf5a97c9, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xbf5a97c9, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xbf5a97c9, 0x80000000, 0xbf5a97c9, 0x3800000}, +{0x3800000, 0xbf5a97c9, 0x80000001, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0xbf5a97c9, 0x80000076, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0xbf5a97c9, 0x80002b94, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0xbf5a97c9, 0x80636d24, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0xbf5a97c9, 0x807fffff, 0xbf5a97c9, 0x3800080}, +{0x3800000, 0xbf5a97c9, 0x80800000, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x80800002, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x81398437, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x8ba98d27, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x8ba98d7a, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0xf51f853a, 0xf51f853b, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0xff7ffff0, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0xbf5a97c9, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0xbf5a97c9, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xbf5a97c9, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xbf5a97c9, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xbf5a97c9, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xbf5a97c9, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xbf5a97c9, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xbf5a97c9, 0x4f3495cb, 0x4f3495ca, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0xe73a5134, 0xe73a5135, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x7c994e9e, 0x7c994e9d, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x6164bd6c, 0x6164bd6b, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x9503366, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0xbf5a97c9, 0xbfda97c9, 0x3800000}, +{0x3800000, 0xbf5a97c9, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x77f31e2f, 0x77f31e2e, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0xaab4d7d8, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x966320b, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0xb26bddee, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0xb5c8e5d3, 0xbf5a97e3, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x317285d3, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x3c9623b1, 0xbf55e6ac, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0xbf5a97c9, 0x7b906a6c, 0x7b906a6b, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x0, 0xe6ff1a14, 0x3800000}, +{0x3800000, 0xe6ff1a14, 0x1, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0xe6ff1a14, 0x76, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0xe6ff1a14, 0x2b94, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0xe6ff1a14, 0x636d24, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0xe6ff1a14, 0x7fffff, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0xe6ff1a14, 0x800000, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x800002, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x1398437, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0xba98d27, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0xba98d7a, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x751f853a, 0x751f8539, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0xe6ff1a14, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xe6ff1a14, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xe6ff1a14, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xe6ff1a14, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xe6ff1a14, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xe6ff1a14, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xe6ff1a14, 0x80000000, 0xe6ff1a14, 0x3800000}, +{0x3800000, 0xe6ff1a14, 0x80000001, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0xe6ff1a14, 0x80000076, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0xe6ff1a14, 0x80002b94, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0xe6ff1a14, 0x80636d24, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0xe6ff1a14, 0x807fffff, 0xe6ff1a14, 0x3800080}, +{0x3800000, 0xe6ff1a14, 0x80800000, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x80800002, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x81398437, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x8ba98d27, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x8ba98d7a, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0xf51f853a, 0xf51f853b, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0xff7ffff0, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0xe6ff1a14, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0xe6ff1a14, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xe6ff1a14, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xe6ff1a14, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xe6ff1a14, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xe6ff1a14, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xe6ff1a14, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xe6ff1a14, 0x4f3495cb, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0xe73a5134, 0xe79cef1f, 0x3800000}, +{0x3800000, 0xe6ff1a14, 0x7c994e9e, 0x7c994e9d, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x6164bd6c, 0xe6fefd7d, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x9503366, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0xbf5a97c9, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0xe6ff1a14, 0xe77f1a14, 0x3800000}, +{0x3800000, 0xe6ff1a14, 0x77f31e2f, 0x77f31e2e, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0xaab4d7d8, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x966320b, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0xb26bddee, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0xb5c8e5d3, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x317285d3, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x3c9623b1, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x51fd2c7c, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0xe6ff1a14, 0x7b906a6c, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x0, 0x77f31e2f, 0x3800000}, +{0x3800000, 0x77f31e2f, 0x1, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x77f31e2f, 0x76, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x77f31e2f, 0x2b94, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x77f31e2f, 0x636d24, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x77f31e2f, 0x7fffff, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x77f31e2f, 0x800000, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x800002, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x1398437, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x77f31e2f, 0xba98d27, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x77f31e2f, 0xba98d7a, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x751f853a, 0x77f81a58, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x7f7ffff0, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x77f31e2f, 0x7f7fffff, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x77f31e2f, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x77f31e2f, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x77f31e2f, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x77f31e2f, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x77f31e2f, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x77f31e2f, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x77f31e2f, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x77f31e2f, 0x80000000, 0x77f31e2f, 0x3800000}, +{0x3800000, 0x77f31e2f, 0x80000001, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x77f31e2f, 0x80000076, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x77f31e2f, 0x80002b94, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x77f31e2f, 0x80636d24, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x77f31e2f, 0x807fffff, 0x77f31e2f, 0x3800080}, +{0x3800000, 0x77f31e2f, 0x80800000, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x80800002, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x81398437, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x8ba98d27, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x8ba98d7a, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x77f31e2f, 0xf51f853a, 0x77ee2205, 0x3800010}, +{0x3800000, 0x77f31e2f, 0xff7ffff0, 0xff7ffe0a, 0x3800010}, +{0x3800000, 0x77f31e2f, 0xff7fffff, 0xff7ffe19, 0x3800010}, +{0x3800000, 0x77f31e2f, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x77f31e2f, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x77f31e2f, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x77f31e2f, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x77f31e2f, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x77f31e2f, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x77f31e2f, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x77f31e2f, 0x4f3495cb, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x77f31e2f, 0xe73a5134, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x7c994e9e, 0x7c998b65, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x6164bd6c, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x9503366, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x77f31e2f, 0xbf5a97c9, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x77f31e2f, 0xe6ff1a14, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x77f31e2f, 0x78731e2f, 0x3800000}, +{0x3800000, 0x77f31e2f, 0xaab4d7d8, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x966320b, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x77f31e2f, 0xb26bddee, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x77f31e2f, 0xb5c8e5d3, 0x77f31e2e, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x317285d3, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x3c9623b1, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x51fd2c7c, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x77f31e2f, 0x7b906a6c, 0x7b915d8a, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x0, 0xaab4d7d8, 0x3800000}, +{0x3800000, 0xaab4d7d8, 0x1, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0xaab4d7d8, 0x76, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0xaab4d7d8, 0x2b94, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0xaab4d7d8, 0x636d24, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0xaab4d7d8, 0x7fffff, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0xaab4d7d8, 0x800000, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x800002, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x1398437, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0xba98d27, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0xba98d7a, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x751f853a, 0x751f8539, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0xaab4d7d8, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xaab4d7d8, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xaab4d7d8, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xaab4d7d8, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xaab4d7d8, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xaab4d7d8, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xaab4d7d8, 0x80000000, 0xaab4d7d8, 0x3800000}, +{0x3800000, 0xaab4d7d8, 0x80000001, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0xaab4d7d8, 0x80000076, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0xaab4d7d8, 0x80002b94, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0xaab4d7d8, 0x80636d24, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0xaab4d7d8, 0x807fffff, 0xaab4d7d8, 0x3800080}, +{0x3800000, 0xaab4d7d8, 0x80800000, 0xaab4d7d9, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x80800002, 0xaab4d7d9, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x81398437, 0xaab4d7d9, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x8ba98d27, 0xaab4d7d9, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x8ba98d7a, 0xaab4d7d9, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0xf51f853a, 0xf51f853b, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0xff7ffff0, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0xaab4d7d8, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0xaab4d7d8, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xaab4d7d8, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xaab4d7d8, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xaab4d7d8, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xaab4d7d8, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xaab4d7d8, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xaab4d7d8, 0x4f3495cb, 0x4f3495ca, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0xe73a5134, 0xe73a5135, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x7c994e9e, 0x7c994e9d, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x6164bd6c, 0x6164bd6b, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x9503366, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x77f31e2f, 0x77f31e2e, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0xaab4d7d8, 0xab34d7d8, 0x3800000}, +{0x3800000, 0xaab4d7d8, 0x966320b, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0xb26bddee, 0xb26bdf58, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0xb5c8e5d3, 0xb5c8e5d6, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x317285d3, 0x3172802c, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x3c9623b1, 0x3c9623b0, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0xaab4d7d8, 0x7b906a6c, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x966320b, 0x0, 0x966320b, 0x3800000}, +{0x3800000, 0x966320b, 0x1, 0x966320b, 0x3800080}, +{0x3800000, 0x966320b, 0x76, 0x966320b, 0x3800080}, +{0x3800000, 0x966320b, 0x2b94, 0x966320b, 0x3800080}, +{0x3800000, 0x966320b, 0x636d24, 0x966320b, 0x3800080}, +{0x3800000, 0x966320b, 0x7fffff, 0x966320b, 0x3800080}, +{0x3800000, 0x966320b, 0x800000, 0x966324b, 0x3800000}, +{0x3800000, 0x966320b, 0x800002, 0x966324b, 0x3800010}, +{0x3800000, 0x966320b, 0x1398437, 0x96632c4, 0x3800010}, +{0x3800000, 0x966320b, 0xba98d27, 0xbb0beb7, 0x3800010}, +{0x3800000, 0x966320b, 0xba98d7a, 0xbb0bf0a, 0x3800010}, +{0x3800000, 0x966320b, 0x751f853a, 0x751f853a, 0x3800010}, +{0x3800000, 0x966320b, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x966320b, 0x7f7fffff, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x966320b, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x966320b, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x966320b, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x966320b, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x966320b, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x966320b, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x966320b, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x966320b, 0x80000000, 0x966320b, 0x3800000}, +{0x3800000, 0x966320b, 0x80000001, 0x966320b, 0x3800080}, +{0x3800000, 0x966320b, 0x80000076, 0x966320b, 0x3800080}, +{0x3800000, 0x966320b, 0x80002b94, 0x966320b, 0x3800080}, +{0x3800000, 0x966320b, 0x80636d24, 0x966320b, 0x3800080}, +{0x3800000, 0x966320b, 0x807fffff, 0x966320b, 0x3800080}, +{0x3800000, 0x966320b, 0x80800000, 0x96631cb, 0x3800000}, +{0x3800000, 0x966320b, 0x80800002, 0x96631ca, 0x3800010}, +{0x3800000, 0x966320b, 0x81398437, 0x9663151, 0x3800010}, +{0x3800000, 0x966320b, 0x8ba98d27, 0x8ba25b97, 0x3800010}, +{0x3800000, 0x966320b, 0x8ba98d7a, 0x8ba25bea, 0x3800010}, +{0x3800000, 0x966320b, 0xf51f853a, 0xf51f853a, 0x3800010}, +{0x3800000, 0x966320b, 0xff7ffff0, 0xff7ffff0, 0x3800010}, +{0x3800000, 0x966320b, 0xff7fffff, 0xff7fffff, 0x3800010}, +{0x3800000, 0x966320b, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x966320b, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x966320b, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x966320b, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x966320b, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x966320b, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x966320b, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x966320b, 0x4f3495cb, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x966320b, 0xe73a5134, 0xe73a5134, 0x3800010}, +{0x3800000, 0x966320b, 0x7c994e9e, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x966320b, 0x6164bd6c, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x966320b, 0x9503366, 0x9db32b8, 0x3800010}, +{0x3800000, 0x966320b, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0x966320b, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0x966320b, 0x77f31e2f, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x966320b, 0xaab4d7d8, 0xaab4d7d8, 0x3800010}, +{0x3800000, 0x966320b, 0x966320b, 0x9e6320b, 0x3800000}, +{0x3800000, 0x966320b, 0xb26bddee, 0xb26bddee, 0x3800010}, +{0x3800000, 0x966320b, 0xb5c8e5d3, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0x966320b, 0x317285d3, 0x317285d3, 0x3800010}, +{0x3800000, 0x966320b, 0x3c9623b1, 0x3c9623b1, 0x3800010}, +{0x3800000, 0x966320b, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x966320b, 0x7b906a6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0xb26bddee, 0x0, 0xb26bddee, 0x3800000}, +{0x3800000, 0xb26bddee, 0x1, 0xb26bddee, 0x3800080}, +{0x3800000, 0xb26bddee, 0x76, 0xb26bddee, 0x3800080}, +{0x3800000, 0xb26bddee, 0x2b94, 0xb26bddee, 0x3800080}, +{0x3800000, 0xb26bddee, 0x636d24, 0xb26bddee, 0x3800080}, +{0x3800000, 0xb26bddee, 0x7fffff, 0xb26bddee, 0x3800080}, +{0x3800000, 0xb26bddee, 0x800000, 0xb26bddee, 0x3800010}, +{0x3800000, 0xb26bddee, 0x800002, 0xb26bddee, 0x3800010}, +{0x3800000, 0xb26bddee, 0x1398437, 0xb26bddee, 0x3800010}, +{0x3800000, 0xb26bddee, 0xba98d27, 0xb26bddee, 0x3800010}, +{0x3800000, 0xb26bddee, 0xba98d7a, 0xb26bddee, 0x3800010}, +{0x3800000, 0xb26bddee, 0x751f853a, 0x751f8539, 0x3800010}, +{0x3800000, 0xb26bddee, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, +{0x3800000, 0xb26bddee, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0xb26bddee, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0xb26bddee, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xb26bddee, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xb26bddee, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xb26bddee, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xb26bddee, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xb26bddee, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xb26bddee, 0x80000000, 0xb26bddee, 0x3800000}, +{0x3800000, 0xb26bddee, 0x80000001, 0xb26bddee, 0x3800080}, +{0x3800000, 0xb26bddee, 0x80000076, 0xb26bddee, 0x3800080}, +{0x3800000, 0xb26bddee, 0x80002b94, 0xb26bddee, 0x3800080}, +{0x3800000, 0xb26bddee, 0x80636d24, 0xb26bddee, 0x3800080}, +{0x3800000, 0xb26bddee, 0x807fffff, 0xb26bddee, 0x3800080}, +{0x3800000, 0xb26bddee, 0x80800000, 0xb26bddef, 0x3800010}, +{0x3800000, 0xb26bddee, 0x80800002, 0xb26bddef, 0x3800010}, +{0x3800000, 0xb26bddee, 0x81398437, 0xb26bddef, 0x3800010}, +{0x3800000, 0xb26bddee, 0x8ba98d27, 0xb26bddef, 0x3800010}, +{0x3800000, 0xb26bddee, 0x8ba98d7a, 0xb26bddef, 0x3800010}, +{0x3800000, 0xb26bddee, 0xf51f853a, 0xf51f853b, 0x3800010}, +{0x3800000, 0xb26bddee, 0xff7ffff0, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xb26bddee, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0xb26bddee, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0xb26bddee, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xb26bddee, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xb26bddee, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xb26bddee, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xb26bddee, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xb26bddee, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xb26bddee, 0x4f3495cb, 0x4f3495ca, 0x3800010}, +{0x3800000, 0xb26bddee, 0xe73a5134, 0xe73a5135, 0x3800010}, +{0x3800000, 0xb26bddee, 0x7c994e9e, 0x7c994e9d, 0x3800010}, +{0x3800000, 0xb26bddee, 0x6164bd6c, 0x6164bd6b, 0x3800010}, +{0x3800000, 0xb26bddee, 0x9503366, 0xb26bddee, 0x3800010}, +{0x3800000, 0xb26bddee, 0xbf5a97c9, 0xbf5a97ca, 0x3800010}, +{0x3800000, 0xb26bddee, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xb26bddee, 0x77f31e2f, 0x77f31e2e, 0x3800010}, +{0x3800000, 0xb26bddee, 0xaab4d7d8, 0xb26bdf58, 0x3800010}, +{0x3800000, 0xb26bddee, 0x966320b, 0xb26bddee, 0x3800010}, +{0x3800000, 0xb26bddee, 0xb26bddee, 0xb2ebddee, 0x3800000}, +{0x3800000, 0xb26bddee, 0xb5c8e5d3, 0xb5cabd8f, 0x3800010}, +{0x3800000, 0xb26bddee, 0x317285d3, 0xb22f3c7a, 0x3800010}, +{0x3800000, 0xb26bddee, 0x3c9623b1, 0x3c9623a9, 0x3800010}, +{0x3800000, 0xb26bddee, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0xb26bddee, 0x7b906a6c, 0x7b906a6b, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x0, 0xb5c8e5d3, 0x3800000}, +{0x3800000, 0xb5c8e5d3, 0x1, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0xb5c8e5d3, 0x76, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0xb5c8e5d3, 0x2b94, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0xb5c8e5d3, 0x636d24, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0xb5c8e5d3, 0x7fffff, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0xb5c8e5d3, 0x800000, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x800002, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x1398437, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0xba98d27, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0xba98d7a, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x751f853a, 0x751f8539, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x7f7ffff0, 0x7f7fffef, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x7f7fffff, 0x7f7ffffe, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0xb5c8e5d3, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xb5c8e5d3, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xb5c8e5d3, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xb5c8e5d3, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xb5c8e5d3, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xb5c8e5d3, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xb5c8e5d3, 0x80000000, 0xb5c8e5d3, 0x3800000}, +{0x3800000, 0xb5c8e5d3, 0x80000001, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0xb5c8e5d3, 0x80000076, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0xb5c8e5d3, 0x80002b94, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0xb5c8e5d3, 0x80636d24, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0xb5c8e5d3, 0x807fffff, 0xb5c8e5d3, 0x3800080}, +{0x3800000, 0xb5c8e5d3, 0x80800000, 0xb5c8e5d4, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x80800002, 0xb5c8e5d4, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x81398437, 0xb5c8e5d4, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x8ba98d27, 0xb5c8e5d4, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x8ba98d7a, 0xb5c8e5d4, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0xf51f853a, 0xf51f853b, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0xff7ffff0, 0xff7ffff1, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0xff7fffff, 0xff800000, 0x3800014}, +{0x3800000, 0xb5c8e5d3, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0xb5c8e5d3, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0xb5c8e5d3, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0xb5c8e5d3, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0xb5c8e5d3, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0xb5c8e5d3, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0xb5c8e5d3, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0xb5c8e5d3, 0x4f3495cb, 0x4f3495ca, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0xe73a5134, 0xe73a5135, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x7c994e9e, 0x7c994e9d, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x6164bd6c, 0x6164bd6b, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x9503366, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0xbf5a97c9, 0xbf5a97e3, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0xe6ff1a14, 0xe6ff1a15, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x77f31e2f, 0x77f31e2e, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0xaab4d7d8, 0xb5c8e5d6, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x966320b, 0xb5c8e5d3, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0xb26bddee, 0xb5cabd8f, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0xb5c8e5d3, 0xb648e5d3, 0x3800000}, +{0x3800000, 0xb5c8e5d3, 0x317285d3, 0xb5c86c91, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x3c9623b1, 0x3c96208d, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x51fd2c7c, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0xb5c8e5d3, 0x7b906a6c, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x317285d3, 0x0, 0x317285d3, 0x3800000}, +{0x3800000, 0x317285d3, 0x1, 0x317285d3, 0x3800080}, +{0x3800000, 0x317285d3, 0x76, 0x317285d3, 0x3800080}, +{0x3800000, 0x317285d3, 0x2b94, 0x317285d3, 0x3800080}, +{0x3800000, 0x317285d3, 0x636d24, 0x317285d3, 0x3800080}, +{0x3800000, 0x317285d3, 0x7fffff, 0x317285d3, 0x3800080}, +{0x3800000, 0x317285d3, 0x800000, 0x317285d3, 0x3800010}, +{0x3800000, 0x317285d3, 0x800002, 0x317285d3, 0x3800010}, +{0x3800000, 0x317285d3, 0x1398437, 0x317285d3, 0x3800010}, +{0x3800000, 0x317285d3, 0xba98d27, 0x317285d3, 0x3800010}, +{0x3800000, 0x317285d3, 0xba98d7a, 0x317285d3, 0x3800010}, +{0x3800000, 0x317285d3, 0x751f853a, 0x751f853a, 0x3800010}, +{0x3800000, 0x317285d3, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x317285d3, 0x7f7fffff, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x317285d3, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x317285d3, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x317285d3, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x317285d3, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x317285d3, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x317285d3, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x317285d3, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x317285d3, 0x80000000, 0x317285d3, 0x3800000}, +{0x3800000, 0x317285d3, 0x80000001, 0x317285d3, 0x3800080}, +{0x3800000, 0x317285d3, 0x80000076, 0x317285d3, 0x3800080}, +{0x3800000, 0x317285d3, 0x80002b94, 0x317285d3, 0x3800080}, +{0x3800000, 0x317285d3, 0x80636d24, 0x317285d3, 0x3800080}, +{0x3800000, 0x317285d3, 0x807fffff, 0x317285d3, 0x3800080}, +{0x3800000, 0x317285d3, 0x80800000, 0x317285d2, 0x3800010}, +{0x3800000, 0x317285d3, 0x80800002, 0x317285d2, 0x3800010}, +{0x3800000, 0x317285d3, 0x81398437, 0x317285d2, 0x3800010}, +{0x3800000, 0x317285d3, 0x8ba98d27, 0x317285d2, 0x3800010}, +{0x3800000, 0x317285d3, 0x8ba98d7a, 0x317285d2, 0x3800010}, +{0x3800000, 0x317285d3, 0xf51f853a, 0xf51f853a, 0x3800010}, +{0x3800000, 0x317285d3, 0xff7ffff0, 0xff7ffff0, 0x3800010}, +{0x3800000, 0x317285d3, 0xff7fffff, 0xff7fffff, 0x3800010}, +{0x3800000, 0x317285d3, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x317285d3, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x317285d3, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x317285d3, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x317285d3, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x317285d3, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x317285d3, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x317285d3, 0x4f3495cb, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x317285d3, 0xe73a5134, 0xe73a5134, 0x3800010}, +{0x3800000, 0x317285d3, 0x7c994e9e, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x317285d3, 0x6164bd6c, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x317285d3, 0x9503366, 0x317285d3, 0x3800010}, +{0x3800000, 0x317285d3, 0xbf5a97c9, 0xbf5a97c9, 0x3800010}, +{0x3800000, 0x317285d3, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0x317285d3, 0x77f31e2f, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x317285d3, 0xaab4d7d8, 0x3172802c, 0x3800010}, +{0x3800000, 0x317285d3, 0x966320b, 0x317285d3, 0x3800010}, +{0x3800000, 0x317285d3, 0xb26bddee, 0xb22f3c7a, 0x3800010}, +{0x3800000, 0x317285d3, 0xb5c8e5d3, 0xb5c86c91, 0x3800010}, +{0x3800000, 0x317285d3, 0x317285d3, 0x31f285d3, 0x3800000}, +{0x3800000, 0x317285d3, 0x3c9623b1, 0x3c9623b2, 0x3800010}, +{0x3800000, 0x317285d3, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x317285d3, 0x7b906a6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x0, 0x3c9623b1, 0x3800000}, +{0x3800000, 0x3c9623b1, 0x1, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x3c9623b1, 0x76, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x3c9623b1, 0x2b94, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x3c9623b1, 0x636d24, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x3c9623b1, 0x7fffff, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x3c9623b1, 0x800000, 0x3c9623b1, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x800002, 0x3c9623b1, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x1398437, 0x3c9623b1, 0x3800010}, +{0x3800000, 0x3c9623b1, 0xba98d27, 0x3c9623b1, 0x3800010}, +{0x3800000, 0x3c9623b1, 0xba98d7a, 0x3c9623b1, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x751f853a, 0x751f853a, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x7f7fffff, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x3c9623b1, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x3c9623b1, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x3c9623b1, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x3c9623b1, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x3c9623b1, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x3c9623b1, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x3c9623b1, 0x80000000, 0x3c9623b1, 0x3800000}, +{0x3800000, 0x3c9623b1, 0x80000001, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x3c9623b1, 0x80000076, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x3c9623b1, 0x80002b94, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x3c9623b1, 0x80636d24, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x3c9623b1, 0x807fffff, 0x3c9623b1, 0x3800080}, +{0x3800000, 0x3c9623b1, 0x80800000, 0x3c9623b0, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x80800002, 0x3c9623b0, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x81398437, 0x3c9623b0, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x8ba98d27, 0x3c9623b0, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x8ba98d7a, 0x3c9623b0, 0x3800010}, +{0x3800000, 0x3c9623b1, 0xf51f853a, 0xf51f853a, 0x3800010}, +{0x3800000, 0x3c9623b1, 0xff7ffff0, 0xff7ffff0, 0x3800010}, +{0x3800000, 0x3c9623b1, 0xff7fffff, 0xff7fffff, 0x3800010}, +{0x3800000, 0x3c9623b1, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x3c9623b1, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x3c9623b1, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x3c9623b1, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x3c9623b1, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x3c9623b1, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x3c9623b1, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x3c9623b1, 0x4f3495cb, 0x4f3495cb, 0x3800010}, +{0x3800000, 0x3c9623b1, 0xe73a5134, 0xe73a5134, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x7c994e9e, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x6164bd6c, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x9503366, 0x3c9623b1, 0x3800010}, +{0x3800000, 0x3c9623b1, 0xbf5a97c9, 0xbf55e6ac, 0x3800010}, +{0x3800000, 0x3c9623b1, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x77f31e2f, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x3c9623b1, 0xaab4d7d8, 0x3c9623b0, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x966320b, 0x3c9623b1, 0x3800010}, +{0x3800000, 0x3c9623b1, 0xb26bddee, 0x3c9623a9, 0x3800010}, +{0x3800000, 0x3c9623b1, 0xb5c8e5d3, 0x3c96208d, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x317285d3, 0x3c9623b2, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x3c9623b1, 0x3d1623b1, 0x3800000}, +{0x3800000, 0x3c9623b1, 0x51fd2c7c, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x3c9623b1, 0x7b906a6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x0, 0x51fd2c7c, 0x3800000}, +{0x3800000, 0x51fd2c7c, 0x1, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x51fd2c7c, 0x76, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x51fd2c7c, 0x2b94, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x51fd2c7c, 0x636d24, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x51fd2c7c, 0x7fffff, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x51fd2c7c, 0x800000, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x800002, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x1398437, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0xba98d27, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0xba98d7a, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x751f853a, 0x751f853a, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x7f7ffff0, 0x7f7ffff0, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x7f7fffff, 0x7f7fffff, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x51fd2c7c, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x51fd2c7c, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x51fd2c7c, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x51fd2c7c, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x51fd2c7c, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x51fd2c7c, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x51fd2c7c, 0x80000000, 0x51fd2c7c, 0x3800000}, +{0x3800000, 0x51fd2c7c, 0x80000001, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x51fd2c7c, 0x80000076, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x51fd2c7c, 0x80002b94, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x51fd2c7c, 0x80636d24, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x51fd2c7c, 0x807fffff, 0x51fd2c7c, 0x3800080}, +{0x3800000, 0x51fd2c7c, 0x80800000, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x80800002, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x81398437, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x8ba98d27, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x8ba98d7a, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0xf51f853a, 0xf51f853a, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0xff7ffff0, 0xff7ffff0, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0xff7fffff, 0xff7fffff, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x51fd2c7c, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x51fd2c7c, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x51fd2c7c, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x51fd2c7c, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x51fd2c7c, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x51fd2c7c, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x51fd2c7c, 0x4f3495cb, 0x52016895, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0xe73a5134, 0xe73a5134, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x7c994e9e, 0x7c994e9e, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x6164bd6c, 0x6164bd6c, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x9503366, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0xbf5a97c9, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0xe6ff1a14, 0xe6ff1a14, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x77f31e2f, 0x77f31e2f, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0xaab4d7d8, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x966320b, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0xb26bddee, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0xb5c8e5d3, 0x51fd2c7b, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x317285d3, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x3c9623b1, 0x51fd2c7c, 0x3800010}, +{0x3800000, 0x51fd2c7c, 0x51fd2c7c, 0x527d2c7c, 0x3800000}, +{0x3800000, 0x51fd2c7c, 0x7b906a6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x0, 0x7b906a6c, 0x3800000}, +{0x3800000, 0x7b906a6c, 0x1, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x7b906a6c, 0x76, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x7b906a6c, 0x2b94, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x7b906a6c, 0x636d24, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x7b906a6c, 0x7fffff, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x7b906a6c, 0x800000, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x800002, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x1398437, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0xba98d27, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0xba98d7a, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x751f853a, 0x7b906f68, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x7f7ffff0, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7b906a6c, 0x7f7fffff, 0x7f7fffff, 0x3800014}, +{0x3800000, 0x7b906a6c, 0x7f800000, 0x7f800000, 0x3800000}, +{0x3800000, 0x7b906a6c, 0x7f800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7b906a6c, 0x7f984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7b906a6c, 0x7fbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7b906a6c, 0x7fc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7b906a6c, 0x7fd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7b906a6c, 0x7fffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7b906a6c, 0x80000000, 0x7b906a6c, 0x3800000}, +{0x3800000, 0x7b906a6c, 0x80000001, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x7b906a6c, 0x80000076, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x7b906a6c, 0x80002b94, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x7b906a6c, 0x80636d24, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x7b906a6c, 0x807fffff, 0x7b906a6c, 0x3800080}, +{0x3800000, 0x7b906a6c, 0x80800000, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x80800002, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x81398437, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x8ba98d27, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x8ba98d7a, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x7b906a6c, 0xf51f853a, 0x7b90656f, 0x3800010}, +{0x3800000, 0x7b906a6c, 0xff7ffff0, 0xff7edf1c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0xff7fffff, 0xff7edf2b, 0x3800010}, +{0x3800000, 0x7b906a6c, 0xff800000, 0xff800000, 0x3800000}, +{0x3800000, 0x7b906a6c, 0xff800001, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7b906a6c, 0xff984a37, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7b906a6c, 0xffbfffff, 0x7fc00000, 0x3800001}, +{0x3800000, 0x7b906a6c, 0xffc00000, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7b906a6c, 0xffd9ba98, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7b906a6c, 0xffffffff, 0x7fc00000, 0x3800000}, +{0x3800000, 0x7b906a6c, 0x4f3495cb, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0xe73a5134, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x7c994e9e, 0x7cbd6939, 0x3800000}, +{0x3800000, 0x7b906a6c, 0x6164bd6c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x9503366, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0xbf5a97c9, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x7b906a6c, 0xe6ff1a14, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x77f31e2f, 0x7b915d8a, 0x3800010}, +{0x3800000, 0x7b906a6c, 0xaab4d7d8, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x966320b, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0xb26bddee, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x7b906a6c, 0xb5c8e5d3, 0x7b906a6b, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x317285d3, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x3c9623b1, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x51fd2c7c, 0x7b906a6c, 0x3800010}, +{0x3800000, 0x7b906a6c, 0x7b906a6c, 0x7c106a6c, 0x3800000}, +{0x3400000, 0x0, 0x0, 0x0, 0x3400000}, +{0x3400000, 0x0, 0x1, 0x0, 0x3400080}, +{0x3400000, 0x0, 0x76, 0x0, 0x3400080}, +{0x3400000, 0x0, 0x2b94, 0x0, 0x3400080}, +{0x3400000, 0x0, 0x636d24, 0x0, 0x3400080}, +{0x3400000, 0x0, 0x7fffff, 0x0, 0x3400080}, +{0x3400000, 0x0, 0x800000, 0x800000, 0x3400000}, +{0x3400000, 0x0, 0x800002, 0x800002, 0x3400000}, +{0x3400000, 0x0, 0x1398437, 0x1398437, 0x3400000}, +{0x3400000, 0x0, 0xba98d27, 0xba98d27, 0x3400000}, +{0x3400000, 0x0, 0xba98d7a, 0xba98d7a, 0x3400000}, +{0x3400000, 0x0, 0x751f853a, 0x751f853a, 0x3400000}, +{0x3400000, 0x0, 0x7f7ffff0, 0x7f7ffff0, 0x3400000}, +{0x3400000, 0x0, 0x7f7fffff, 0x7f7fffff, 0x3400000}, +{0x3400000, 0x0, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x0, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x0, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x0, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x0, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x0, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x0, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x0, 0x80000000, 0x0, 0x3400000}, +{0x3400000, 0x0, 0x80000001, 0x0, 0x3400080}, +{0x3400000, 0x0, 0x80000076, 0x0, 0x3400080}, +{0x3400000, 0x0, 0x80002b94, 0x0, 0x3400080}, +{0x3400000, 0x0, 0x80636d24, 0x0, 0x3400080}, +{0x3400000, 0x0, 0x807fffff, 0x0, 0x3400080}, +{0x3400000, 0x0, 0x80800000, 0x80800000, 0x3400000}, +{0x3400000, 0x0, 0x80800002, 0x80800002, 0x3400000}, +{0x3400000, 0x0, 0x81398437, 0x81398437, 0x3400000}, +{0x3400000, 0x0, 0x8ba98d27, 0x8ba98d27, 0x3400000}, +{0x3400000, 0x0, 0x8ba98d7a, 0x8ba98d7a, 0x3400000}, +{0x3400000, 0x0, 0xf51f853a, 0xf51f853a, 0x3400000}, +{0x3400000, 0x0, 0xff7ffff0, 0xff7ffff0, 0x3400000}, +{0x3400000, 0x0, 0xff7fffff, 0xff7fffff, 0x3400000}, +{0x3400000, 0x0, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x0, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x0, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x0, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x0, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x0, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x0, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x0, 0x4f3495cb, 0x4f3495cb, 0x3400000}, +{0x3400000, 0x0, 0xe73a5134, 0xe73a5134, 0x3400000}, +{0x3400000, 0x0, 0x7c994e9e, 0x7c994e9e, 0x3400000}, +{0x3400000, 0x0, 0x6164bd6c, 0x6164bd6c, 0x3400000}, +{0x3400000, 0x0, 0x9503366, 0x9503366, 0x3400000}, +{0x3400000, 0x0, 0xbf5a97c9, 0xbf5a97c9, 0x3400000}, +{0x3400000, 0x0, 0xe6ff1a14, 0xe6ff1a14, 0x3400000}, +{0x3400000, 0x0, 0x77f31e2f, 0x77f31e2f, 0x3400000}, +{0x3400000, 0x0, 0xaab4d7d8, 0xaab4d7d8, 0x3400000}, +{0x3400000, 0x0, 0x966320b, 0x966320b, 0x3400000}, +{0x3400000, 0x0, 0xb26bddee, 0xb26bddee, 0x3400000}, +{0x3400000, 0x0, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400000}, +{0x3400000, 0x0, 0x317285d3, 0x317285d3, 0x3400000}, +{0x3400000, 0x0, 0x3c9623b1, 0x3c9623b1, 0x3400000}, +{0x3400000, 0x0, 0x51fd2c7c, 0x51fd2c7c, 0x3400000}, +{0x3400000, 0x0, 0x7b906a6c, 0x7b906a6c, 0x3400000}, +{0x3400000, 0x1, 0x0, 0x0, 0x3400080}, +{0x3400000, 0x1, 0x1, 0x0, 0x3400080}, +{0x3400000, 0x1, 0x76, 0x0, 0x3400080}, +{0x3400000, 0x1, 0x2b94, 0x0, 0x3400080}, +{0x3400000, 0x1, 0x636d24, 0x0, 0x3400080}, +{0x3400000, 0x1, 0x7fffff, 0x0, 0x3400080}, +{0x3400000, 0x1, 0x800000, 0x800000, 0x3400080}, +{0x3400000, 0x1, 0x800002, 0x800002, 0x3400080}, +{0x3400000, 0x1, 0x1398437, 0x1398437, 0x3400080}, +{0x3400000, 0x1, 0xba98d27, 0xba98d27, 0x3400080}, +{0x3400000, 0x1, 0xba98d7a, 0xba98d7a, 0x3400080}, +{0x3400000, 0x1, 0x751f853a, 0x751f853a, 0x3400080}, +{0x3400000, 0x1, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x1, 0x7f7fffff, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x1, 0x7f800000, 0x7f800000, 0x3400080}, +{0x3400000, 0x1, 0x7f800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x1, 0x7f984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x1, 0x7fbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x1, 0x7fc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x1, 0x7fd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x1, 0x7fffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x1, 0x80000000, 0x0, 0x3400080}, +{0x3400000, 0x1, 0x80000001, 0x0, 0x3400080}, +{0x3400000, 0x1, 0x80000076, 0x0, 0x3400080}, +{0x3400000, 0x1, 0x80002b94, 0x0, 0x3400080}, +{0x3400000, 0x1, 0x80636d24, 0x0, 0x3400080}, +{0x3400000, 0x1, 0x807fffff, 0x0, 0x3400080}, +{0x3400000, 0x1, 0x80800000, 0x80800000, 0x3400080}, +{0x3400000, 0x1, 0x80800002, 0x80800002, 0x3400080}, +{0x3400000, 0x1, 0x81398437, 0x81398437, 0x3400080}, +{0x3400000, 0x1, 0x8ba98d27, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x1, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x1, 0xf51f853a, 0xf51f853a, 0x3400080}, +{0x3400000, 0x1, 0xff7ffff0, 0xff7ffff0, 0x3400080}, +{0x3400000, 0x1, 0xff7fffff, 0xff7fffff, 0x3400080}, +{0x3400000, 0x1, 0xff800000, 0xff800000, 0x3400080}, +{0x3400000, 0x1, 0xff800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x1, 0xff984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x1, 0xffbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x1, 0xffc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x1, 0xffd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x1, 0xffffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x1, 0x4f3495cb, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x1, 0xe73a5134, 0xe73a5134, 0x3400080}, +{0x3400000, 0x1, 0x7c994e9e, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x1, 0x6164bd6c, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x1, 0x9503366, 0x9503366, 0x3400080}, +{0x3400000, 0x1, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0x1, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0x1, 0x77f31e2f, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x1, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0x1, 0x966320b, 0x966320b, 0x3400080}, +{0x3400000, 0x1, 0xb26bddee, 0xb26bddee, 0x3400080}, +{0x3400000, 0x1, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0x1, 0x317285d3, 0x317285d3, 0x3400080}, +{0x3400000, 0x1, 0x3c9623b1, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x1, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x1, 0x7b906a6c, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x76, 0x0, 0x0, 0x3400080}, +{0x3400000, 0x76, 0x1, 0x0, 0x3400080}, +{0x3400000, 0x76, 0x76, 0x0, 0x3400080}, +{0x3400000, 0x76, 0x2b94, 0x0, 0x3400080}, +{0x3400000, 0x76, 0x636d24, 0x0, 0x3400080}, +{0x3400000, 0x76, 0x7fffff, 0x0, 0x3400080}, +{0x3400000, 0x76, 0x800000, 0x800000, 0x3400080}, +{0x3400000, 0x76, 0x800002, 0x800002, 0x3400080}, +{0x3400000, 0x76, 0x1398437, 0x1398437, 0x3400080}, +{0x3400000, 0x76, 0xba98d27, 0xba98d27, 0x3400080}, +{0x3400000, 0x76, 0xba98d7a, 0xba98d7a, 0x3400080}, +{0x3400000, 0x76, 0x751f853a, 0x751f853a, 0x3400080}, +{0x3400000, 0x76, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x76, 0x7f7fffff, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x76, 0x7f800000, 0x7f800000, 0x3400080}, +{0x3400000, 0x76, 0x7f800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x76, 0x7f984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x76, 0x7fbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x76, 0x7fc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x76, 0x7fd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x76, 0x7fffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x76, 0x80000000, 0x0, 0x3400080}, +{0x3400000, 0x76, 0x80000001, 0x0, 0x3400080}, +{0x3400000, 0x76, 0x80000076, 0x0, 0x3400080}, +{0x3400000, 0x76, 0x80002b94, 0x0, 0x3400080}, +{0x3400000, 0x76, 0x80636d24, 0x0, 0x3400080}, +{0x3400000, 0x76, 0x807fffff, 0x0, 0x3400080}, +{0x3400000, 0x76, 0x80800000, 0x80800000, 0x3400080}, +{0x3400000, 0x76, 0x80800002, 0x80800002, 0x3400080}, +{0x3400000, 0x76, 0x81398437, 0x81398437, 0x3400080}, +{0x3400000, 0x76, 0x8ba98d27, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x76, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x76, 0xf51f853a, 0xf51f853a, 0x3400080}, +{0x3400000, 0x76, 0xff7ffff0, 0xff7ffff0, 0x3400080}, +{0x3400000, 0x76, 0xff7fffff, 0xff7fffff, 0x3400080}, +{0x3400000, 0x76, 0xff800000, 0xff800000, 0x3400080}, +{0x3400000, 0x76, 0xff800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x76, 0xff984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x76, 0xffbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x76, 0xffc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x76, 0xffd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x76, 0xffffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x76, 0x4f3495cb, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x76, 0xe73a5134, 0xe73a5134, 0x3400080}, +{0x3400000, 0x76, 0x7c994e9e, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x76, 0x6164bd6c, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x76, 0x9503366, 0x9503366, 0x3400080}, +{0x3400000, 0x76, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0x76, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0x76, 0x77f31e2f, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x76, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0x76, 0x966320b, 0x966320b, 0x3400080}, +{0x3400000, 0x76, 0xb26bddee, 0xb26bddee, 0x3400080}, +{0x3400000, 0x76, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0x76, 0x317285d3, 0x317285d3, 0x3400080}, +{0x3400000, 0x76, 0x3c9623b1, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x76, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x76, 0x7b906a6c, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x2b94, 0x0, 0x0, 0x3400080}, +{0x3400000, 0x2b94, 0x1, 0x0, 0x3400080}, +{0x3400000, 0x2b94, 0x76, 0x0, 0x3400080}, +{0x3400000, 0x2b94, 0x2b94, 0x0, 0x3400080}, +{0x3400000, 0x2b94, 0x636d24, 0x0, 0x3400080}, +{0x3400000, 0x2b94, 0x7fffff, 0x0, 0x3400080}, +{0x3400000, 0x2b94, 0x800000, 0x800000, 0x3400080}, +{0x3400000, 0x2b94, 0x800002, 0x800002, 0x3400080}, +{0x3400000, 0x2b94, 0x1398437, 0x1398437, 0x3400080}, +{0x3400000, 0x2b94, 0xba98d27, 0xba98d27, 0x3400080}, +{0x3400000, 0x2b94, 0xba98d7a, 0xba98d7a, 0x3400080}, +{0x3400000, 0x2b94, 0x751f853a, 0x751f853a, 0x3400080}, +{0x3400000, 0x2b94, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x2b94, 0x7f7fffff, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x2b94, 0x7f800000, 0x7f800000, 0x3400080}, +{0x3400000, 0x2b94, 0x7f800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x2b94, 0x7f984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x2b94, 0x7fbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x2b94, 0x7fc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x2b94, 0x7fd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x2b94, 0x7fffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x2b94, 0x80000000, 0x0, 0x3400080}, +{0x3400000, 0x2b94, 0x80000001, 0x0, 0x3400080}, +{0x3400000, 0x2b94, 0x80000076, 0x0, 0x3400080}, +{0x3400000, 0x2b94, 0x80002b94, 0x0, 0x3400080}, +{0x3400000, 0x2b94, 0x80636d24, 0x0, 0x3400080}, +{0x3400000, 0x2b94, 0x807fffff, 0x0, 0x3400080}, +{0x3400000, 0x2b94, 0x80800000, 0x80800000, 0x3400080}, +{0x3400000, 0x2b94, 0x80800002, 0x80800002, 0x3400080}, +{0x3400000, 0x2b94, 0x81398437, 0x81398437, 0x3400080}, +{0x3400000, 0x2b94, 0x8ba98d27, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x2b94, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x2b94, 0xf51f853a, 0xf51f853a, 0x3400080}, +{0x3400000, 0x2b94, 0xff7ffff0, 0xff7ffff0, 0x3400080}, +{0x3400000, 0x2b94, 0xff7fffff, 0xff7fffff, 0x3400080}, +{0x3400000, 0x2b94, 0xff800000, 0xff800000, 0x3400080}, +{0x3400000, 0x2b94, 0xff800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x2b94, 0xff984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x2b94, 0xffbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x2b94, 0xffc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x2b94, 0xffd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x2b94, 0xffffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x2b94, 0x4f3495cb, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x2b94, 0xe73a5134, 0xe73a5134, 0x3400080}, +{0x3400000, 0x2b94, 0x7c994e9e, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x2b94, 0x6164bd6c, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x2b94, 0x9503366, 0x9503366, 0x3400080}, +{0x3400000, 0x2b94, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0x2b94, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0x2b94, 0x77f31e2f, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x2b94, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0x2b94, 0x966320b, 0x966320b, 0x3400080}, +{0x3400000, 0x2b94, 0xb26bddee, 0xb26bddee, 0x3400080}, +{0x3400000, 0x2b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0x2b94, 0x317285d3, 0x317285d3, 0x3400080}, +{0x3400000, 0x2b94, 0x3c9623b1, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x2b94, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x2b94, 0x7b906a6c, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x636d24, 0x0, 0x0, 0x3400080}, +{0x3400000, 0x636d24, 0x1, 0x0, 0x3400080}, +{0x3400000, 0x636d24, 0x76, 0x0, 0x3400080}, +{0x3400000, 0x636d24, 0x2b94, 0x0, 0x3400080}, +{0x3400000, 0x636d24, 0x636d24, 0x0, 0x3400080}, +{0x3400000, 0x636d24, 0x7fffff, 0x0, 0x3400080}, +{0x3400000, 0x636d24, 0x800000, 0x800000, 0x3400080}, +{0x3400000, 0x636d24, 0x800002, 0x800002, 0x3400080}, +{0x3400000, 0x636d24, 0x1398437, 0x1398437, 0x3400080}, +{0x3400000, 0x636d24, 0xba98d27, 0xba98d27, 0x3400080}, +{0x3400000, 0x636d24, 0xba98d7a, 0xba98d7a, 0x3400080}, +{0x3400000, 0x636d24, 0x751f853a, 0x751f853a, 0x3400080}, +{0x3400000, 0x636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x636d24, 0x7f7fffff, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x636d24, 0x7f800000, 0x7f800000, 0x3400080}, +{0x3400000, 0x636d24, 0x7f800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x636d24, 0x7f984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x636d24, 0x7fbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x636d24, 0x7fc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x636d24, 0x7fd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x636d24, 0x7fffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x636d24, 0x80000000, 0x0, 0x3400080}, +{0x3400000, 0x636d24, 0x80000001, 0x0, 0x3400080}, +{0x3400000, 0x636d24, 0x80000076, 0x0, 0x3400080}, +{0x3400000, 0x636d24, 0x80002b94, 0x0, 0x3400080}, +{0x3400000, 0x636d24, 0x80636d24, 0x0, 0x3400080}, +{0x3400000, 0x636d24, 0x807fffff, 0x0, 0x3400080}, +{0x3400000, 0x636d24, 0x80800000, 0x80800000, 0x3400080}, +{0x3400000, 0x636d24, 0x80800002, 0x80800002, 0x3400080}, +{0x3400000, 0x636d24, 0x81398437, 0x81398437, 0x3400080}, +{0x3400000, 0x636d24, 0x8ba98d27, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x636d24, 0xf51f853a, 0xf51f853a, 0x3400080}, +{0x3400000, 0x636d24, 0xff7ffff0, 0xff7ffff0, 0x3400080}, +{0x3400000, 0x636d24, 0xff7fffff, 0xff7fffff, 0x3400080}, +{0x3400000, 0x636d24, 0xff800000, 0xff800000, 0x3400080}, +{0x3400000, 0x636d24, 0xff800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x636d24, 0xff984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x636d24, 0xffbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x636d24, 0xffc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x636d24, 0xffd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x636d24, 0xffffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x636d24, 0x4f3495cb, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x636d24, 0xe73a5134, 0xe73a5134, 0x3400080}, +{0x3400000, 0x636d24, 0x7c994e9e, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x636d24, 0x6164bd6c, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x636d24, 0x9503366, 0x9503366, 0x3400080}, +{0x3400000, 0x636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0x636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0x636d24, 0x77f31e2f, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0x636d24, 0x966320b, 0x966320b, 0x3400080}, +{0x3400000, 0x636d24, 0xb26bddee, 0xb26bddee, 0x3400080}, +{0x3400000, 0x636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0x636d24, 0x317285d3, 0x317285d3, 0x3400080}, +{0x3400000, 0x636d24, 0x3c9623b1, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x636d24, 0x7b906a6c, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x7fffff, 0x0, 0x0, 0x3400080}, +{0x3400000, 0x7fffff, 0x1, 0x0, 0x3400080}, +{0x3400000, 0x7fffff, 0x76, 0x0, 0x3400080}, +{0x3400000, 0x7fffff, 0x2b94, 0x0, 0x3400080}, +{0x3400000, 0x7fffff, 0x636d24, 0x0, 0x3400080}, +{0x3400000, 0x7fffff, 0x7fffff, 0x0, 0x3400080}, +{0x3400000, 0x7fffff, 0x800000, 0x800000, 0x3400080}, +{0x3400000, 0x7fffff, 0x800002, 0x800002, 0x3400080}, +{0x3400000, 0x7fffff, 0x1398437, 0x1398437, 0x3400080}, +{0x3400000, 0x7fffff, 0xba98d27, 0xba98d27, 0x3400080}, +{0x3400000, 0x7fffff, 0xba98d7a, 0xba98d7a, 0x3400080}, +{0x3400000, 0x7fffff, 0x751f853a, 0x751f853a, 0x3400080}, +{0x3400000, 0x7fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x7fffff, 0x7f7fffff, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x7fffff, 0x7f800000, 0x7f800000, 0x3400080}, +{0x3400000, 0x7fffff, 0x7f800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fffff, 0x7f984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fffff, 0x7fbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fffff, 0x7fc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffff, 0x7fd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffff, 0x7fffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffff, 0x80000000, 0x0, 0x3400080}, +{0x3400000, 0x7fffff, 0x80000001, 0x0, 0x3400080}, +{0x3400000, 0x7fffff, 0x80000076, 0x0, 0x3400080}, +{0x3400000, 0x7fffff, 0x80002b94, 0x0, 0x3400080}, +{0x3400000, 0x7fffff, 0x80636d24, 0x0, 0x3400080}, +{0x3400000, 0x7fffff, 0x807fffff, 0x0, 0x3400080}, +{0x3400000, 0x7fffff, 0x80800000, 0x80800000, 0x3400080}, +{0x3400000, 0x7fffff, 0x80800002, 0x80800002, 0x3400080}, +{0x3400000, 0x7fffff, 0x81398437, 0x81398437, 0x3400080}, +{0x3400000, 0x7fffff, 0x8ba98d27, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x7fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x7fffff, 0xf51f853a, 0xf51f853a, 0x3400080}, +{0x3400000, 0x7fffff, 0xff7ffff0, 0xff7ffff0, 0x3400080}, +{0x3400000, 0x7fffff, 0xff7fffff, 0xff7fffff, 0x3400080}, +{0x3400000, 0x7fffff, 0xff800000, 0xff800000, 0x3400080}, +{0x3400000, 0x7fffff, 0xff800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fffff, 0xff984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fffff, 0xffbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fffff, 0xffc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffff, 0xffd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffff, 0xffffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffff, 0x4f3495cb, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x7fffff, 0xe73a5134, 0xe73a5134, 0x3400080}, +{0x3400000, 0x7fffff, 0x7c994e9e, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x7fffff, 0x6164bd6c, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x7fffff, 0x9503366, 0x9503366, 0x3400080}, +{0x3400000, 0x7fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0x7fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0x7fffff, 0x77f31e2f, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x7fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0x7fffff, 0x966320b, 0x966320b, 0x3400080}, +{0x3400000, 0x7fffff, 0xb26bddee, 0xb26bddee, 0x3400080}, +{0x3400000, 0x7fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0x7fffff, 0x317285d3, 0x317285d3, 0x3400080}, +{0x3400000, 0x7fffff, 0x3c9623b1, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x7fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x7fffff, 0x7b906a6c, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x800000, 0x0, 0x800000, 0x3400000}, +{0x3400000, 0x800000, 0x1, 0x800000, 0x3400080}, +{0x3400000, 0x800000, 0x76, 0x800000, 0x3400080}, +{0x3400000, 0x800000, 0x2b94, 0x800000, 0x3400080}, +{0x3400000, 0x800000, 0x636d24, 0x800000, 0x3400080}, +{0x3400000, 0x800000, 0x7fffff, 0x800000, 0x3400080}, +{0x3400000, 0x800000, 0x800000, 0x1000000, 0x3400000}, +{0x3400000, 0x800000, 0x800002, 0x1000001, 0x3400000}, +{0x3400000, 0x800000, 0x1398437, 0x1798437, 0x3400000}, +{0x3400000, 0x800000, 0xba98d27, 0xba98d29, 0x3400000}, +{0x3400000, 0x800000, 0xba98d7a, 0xba98d7c, 0x3400000}, +{0x3400000, 0x800000, 0x751f853a, 0x751f853b, 0x3400010}, +{0x3400000, 0x800000, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x800000, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x800000, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x800000, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x800000, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x800000, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x800000, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x800000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x800000, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x800000, 0x80000000, 0x800000, 0x3400000}, +{0x3400000, 0x800000, 0x80000001, 0x800000, 0x3400080}, +{0x3400000, 0x800000, 0x80000076, 0x800000, 0x3400080}, +{0x3400000, 0x800000, 0x80002b94, 0x800000, 0x3400080}, +{0x3400000, 0x800000, 0x80636d24, 0x800000, 0x3400080}, +{0x3400000, 0x800000, 0x807fffff, 0x800000, 0x3400080}, +{0x3400000, 0x800000, 0x80800000, 0x0, 0x3400000}, +{0x3400000, 0x800000, 0x80800002, 0x0, 0x3400008}, +{0x3400000, 0x800000, 0x81398437, 0x80f3086e, 0x3400000}, +{0x3400000, 0x800000, 0x8ba98d27, 0x8ba98d25, 0x3400000}, +{0x3400000, 0x800000, 0x8ba98d7a, 0x8ba98d78, 0x3400000}, +{0x3400000, 0x800000, 0xf51f853a, 0xf51f8539, 0x3400010}, +{0x3400000, 0x800000, 0xff7ffff0, 0xff7fffef, 0x3400010}, +{0x3400000, 0x800000, 0xff7fffff, 0xff7ffffe, 0x3400010}, +{0x3400000, 0x800000, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x800000, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x800000, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x800000, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x800000, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x800000, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x800000, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x800000, 0x4f3495cb, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x800000, 0xe73a5134, 0xe73a5133, 0x3400010}, +{0x3400000, 0x800000, 0x7c994e9e, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x800000, 0x6164bd6c, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x800000, 0x9503366, 0x95033a6, 0x3400000}, +{0x3400000, 0x800000, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0x800000, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0x800000, 0x77f31e2f, 0x77f31e30, 0x3400010}, +{0x3400000, 0x800000, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0x800000, 0x966320b, 0x966324b, 0x3400000}, +{0x3400000, 0x800000, 0xb26bddee, 0xb26bdded, 0x3400010}, +{0x3400000, 0x800000, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0x800000, 0x317285d3, 0x317285d4, 0x3400010}, +{0x3400000, 0x800000, 0x3c9623b1, 0x3c9623b2, 0x3400010}, +{0x3400000, 0x800000, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x800000, 0x7b906a6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x800002, 0x0, 0x800002, 0x3400000}, +{0x3400000, 0x800002, 0x1, 0x800002, 0x3400080}, +{0x3400000, 0x800002, 0x76, 0x800002, 0x3400080}, +{0x3400000, 0x800002, 0x2b94, 0x800002, 0x3400080}, +{0x3400000, 0x800002, 0x636d24, 0x800002, 0x3400080}, +{0x3400000, 0x800002, 0x7fffff, 0x800002, 0x3400080}, +{0x3400000, 0x800002, 0x800000, 0x1000001, 0x3400000}, +{0x3400000, 0x800002, 0x800002, 0x1000002, 0x3400000}, +{0x3400000, 0x800002, 0x1398437, 0x1798438, 0x3400000}, +{0x3400000, 0x800002, 0xba98d27, 0xba98d2a, 0x3400010}, +{0x3400000, 0x800002, 0xba98d7a, 0xba98d7d, 0x3400010}, +{0x3400000, 0x800002, 0x751f853a, 0x751f853b, 0x3400010}, +{0x3400000, 0x800002, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x800002, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x800002, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x800002, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x800002, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x800002, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x800002, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x800002, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x800002, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x800002, 0x80000000, 0x800002, 0x3400000}, +{0x3400000, 0x800002, 0x80000001, 0x800002, 0x3400080}, +{0x3400000, 0x800002, 0x80000076, 0x800002, 0x3400080}, +{0x3400000, 0x800002, 0x80002b94, 0x800002, 0x3400080}, +{0x3400000, 0x800002, 0x80636d24, 0x800002, 0x3400080}, +{0x3400000, 0x800002, 0x807fffff, 0x800002, 0x3400080}, +{0x3400000, 0x800002, 0x80800000, 0x0, 0x3400008}, +{0x3400000, 0x800002, 0x80800002, 0x0, 0x3400000}, +{0x3400000, 0x800002, 0x81398437, 0x80f3086c, 0x3400000}, +{0x3400000, 0x800002, 0x8ba98d27, 0x8ba98d24, 0x3400010}, +{0x3400000, 0x800002, 0x8ba98d7a, 0x8ba98d77, 0x3400010}, +{0x3400000, 0x800002, 0xf51f853a, 0xf51f8539, 0x3400010}, +{0x3400000, 0x800002, 0xff7ffff0, 0xff7fffef, 0x3400010}, +{0x3400000, 0x800002, 0xff7fffff, 0xff7ffffe, 0x3400010}, +{0x3400000, 0x800002, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x800002, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x800002, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x800002, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x800002, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x800002, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x800002, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x800002, 0x4f3495cb, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x800002, 0xe73a5134, 0xe73a5133, 0x3400010}, +{0x3400000, 0x800002, 0x7c994e9e, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x800002, 0x6164bd6c, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x800002, 0x9503366, 0x95033a7, 0x3400010}, +{0x3400000, 0x800002, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0x800002, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0x800002, 0x77f31e2f, 0x77f31e30, 0x3400010}, +{0x3400000, 0x800002, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0x800002, 0x966320b, 0x966324c, 0x3400010}, +{0x3400000, 0x800002, 0xb26bddee, 0xb26bdded, 0x3400010}, +{0x3400000, 0x800002, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0x800002, 0x317285d3, 0x317285d4, 0x3400010}, +{0x3400000, 0x800002, 0x3c9623b1, 0x3c9623b2, 0x3400010}, +{0x3400000, 0x800002, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x800002, 0x7b906a6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x1398437, 0x0, 0x1398437, 0x3400000}, +{0x3400000, 0x1398437, 0x1, 0x1398437, 0x3400080}, +{0x3400000, 0x1398437, 0x76, 0x1398437, 0x3400080}, +{0x3400000, 0x1398437, 0x2b94, 0x1398437, 0x3400080}, +{0x3400000, 0x1398437, 0x636d24, 0x1398437, 0x3400080}, +{0x3400000, 0x1398437, 0x7fffff, 0x1398437, 0x3400080}, +{0x3400000, 0x1398437, 0x800000, 0x1798437, 0x3400000}, +{0x3400000, 0x1398437, 0x800002, 0x1798438, 0x3400000}, +{0x3400000, 0x1398437, 0x1398437, 0x1b98437, 0x3400000}, +{0x3400000, 0x1398437, 0xba98d27, 0xba98d2d, 0x3400010}, +{0x3400000, 0x1398437, 0xba98d7a, 0xba98d80, 0x3400010}, +{0x3400000, 0x1398437, 0x751f853a, 0x751f853b, 0x3400010}, +{0x3400000, 0x1398437, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x1398437, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x1398437, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x1398437, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x1398437, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x1398437, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x1398437, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x1398437, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x1398437, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x1398437, 0x80000000, 0x1398437, 0x3400000}, +{0x3400000, 0x1398437, 0x80000001, 0x1398437, 0x3400080}, +{0x3400000, 0x1398437, 0x80000076, 0x1398437, 0x3400080}, +{0x3400000, 0x1398437, 0x80002b94, 0x1398437, 0x3400080}, +{0x3400000, 0x1398437, 0x80636d24, 0x1398437, 0x3400080}, +{0x3400000, 0x1398437, 0x807fffff, 0x1398437, 0x3400080}, +{0x3400000, 0x1398437, 0x80800000, 0xf3086e, 0x3400000}, +{0x3400000, 0x1398437, 0x80800002, 0xf3086c, 0x3400000}, +{0x3400000, 0x1398437, 0x81398437, 0x0, 0x3400000}, +{0x3400000, 0x1398437, 0x8ba98d27, 0x8ba98d21, 0x3400010}, +{0x3400000, 0x1398437, 0x8ba98d7a, 0x8ba98d74, 0x3400010}, +{0x3400000, 0x1398437, 0xf51f853a, 0xf51f8539, 0x3400010}, +{0x3400000, 0x1398437, 0xff7ffff0, 0xff7fffef, 0x3400010}, +{0x3400000, 0x1398437, 0xff7fffff, 0xff7ffffe, 0x3400010}, +{0x3400000, 0x1398437, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x1398437, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x1398437, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x1398437, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x1398437, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x1398437, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x1398437, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x1398437, 0x4f3495cb, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x1398437, 0xe73a5134, 0xe73a5133, 0x3400010}, +{0x3400000, 0x1398437, 0x7c994e9e, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x1398437, 0x6164bd6c, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x1398437, 0x9503366, 0x9503420, 0x3400010}, +{0x3400000, 0x1398437, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0x1398437, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0x1398437, 0x77f31e2f, 0x77f31e30, 0x3400010}, +{0x3400000, 0x1398437, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0x1398437, 0x966320b, 0x96632c5, 0x3400010}, +{0x3400000, 0x1398437, 0xb26bddee, 0xb26bdded, 0x3400010}, +{0x3400000, 0x1398437, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0x1398437, 0x317285d3, 0x317285d4, 0x3400010}, +{0x3400000, 0x1398437, 0x3c9623b1, 0x3c9623b2, 0x3400010}, +{0x3400000, 0x1398437, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x1398437, 0x7b906a6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0xba98d27, 0x0, 0xba98d27, 0x3400000}, +{0x3400000, 0xba98d27, 0x1, 0xba98d27, 0x3400080}, +{0x3400000, 0xba98d27, 0x76, 0xba98d27, 0x3400080}, +{0x3400000, 0xba98d27, 0x2b94, 0xba98d27, 0x3400080}, +{0x3400000, 0xba98d27, 0x636d24, 0xba98d27, 0x3400080}, +{0x3400000, 0xba98d27, 0x7fffff, 0xba98d27, 0x3400080}, +{0x3400000, 0xba98d27, 0x800000, 0xba98d29, 0x3400000}, +{0x3400000, 0xba98d27, 0x800002, 0xba98d2a, 0x3400010}, +{0x3400000, 0xba98d27, 0x1398437, 0xba98d2d, 0x3400010}, +{0x3400000, 0xba98d27, 0xba98d27, 0xc298d27, 0x3400000}, +{0x3400000, 0xba98d27, 0xba98d7a, 0xc298d51, 0x3400010}, +{0x3400000, 0xba98d27, 0x751f853a, 0x751f853b, 0x3400010}, +{0x3400000, 0xba98d27, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0xba98d27, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0xba98d27, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0xba98d27, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xba98d27, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xba98d27, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xba98d27, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xba98d27, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xba98d27, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xba98d27, 0x80000000, 0xba98d27, 0x3400000}, +{0x3400000, 0xba98d27, 0x80000001, 0xba98d27, 0x3400080}, +{0x3400000, 0xba98d27, 0x80000076, 0xba98d27, 0x3400080}, +{0x3400000, 0xba98d27, 0x80002b94, 0xba98d27, 0x3400080}, +{0x3400000, 0xba98d27, 0x80636d24, 0xba98d27, 0x3400080}, +{0x3400000, 0xba98d27, 0x807fffff, 0xba98d27, 0x3400080}, +{0x3400000, 0xba98d27, 0x80800000, 0xba98d25, 0x3400000}, +{0x3400000, 0xba98d27, 0x80800002, 0xba98d25, 0x3400010}, +{0x3400000, 0xba98d27, 0x81398437, 0xba98d22, 0x3400010}, +{0x3400000, 0xba98d27, 0x8ba98d27, 0x0, 0x3400000}, +{0x3400000, 0xba98d27, 0x8ba98d7a, 0x83260000, 0x3400000}, +{0x3400000, 0xba98d27, 0xf51f853a, 0xf51f8539, 0x3400010}, +{0x3400000, 0xba98d27, 0xff7ffff0, 0xff7fffef, 0x3400010}, +{0x3400000, 0xba98d27, 0xff7fffff, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xba98d27, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0xba98d27, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xba98d27, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xba98d27, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xba98d27, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xba98d27, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xba98d27, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xba98d27, 0x4f3495cb, 0x4f3495cc, 0x3400010}, +{0x3400000, 0xba98d27, 0xe73a5134, 0xe73a5133, 0x3400010}, +{0x3400000, 0xba98d27, 0x7c994e9e, 0x7c994e9f, 0x3400010}, +{0x3400000, 0xba98d27, 0x6164bd6c, 0x6164bd6d, 0x3400010}, +{0x3400000, 0xba98d27, 0x9503366, 0xbb00ec3, 0x3400010}, +{0x3400000, 0xba98d27, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0xba98d27, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xba98d27, 0x77f31e2f, 0x77f31e30, 0x3400010}, +{0x3400000, 0xba98d27, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0xba98d27, 0x966320b, 0xbb0beb8, 0x3400010}, +{0x3400000, 0xba98d27, 0xb26bddee, 0xb26bdded, 0x3400010}, +{0x3400000, 0xba98d27, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0xba98d27, 0x317285d3, 0x317285d4, 0x3400010}, +{0x3400000, 0xba98d27, 0x3c9623b1, 0x3c9623b2, 0x3400010}, +{0x3400000, 0xba98d27, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0xba98d27, 0x7b906a6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0xba98d7a, 0x0, 0xba98d7a, 0x3400000}, +{0x3400000, 0xba98d7a, 0x1, 0xba98d7a, 0x3400080}, +{0x3400000, 0xba98d7a, 0x76, 0xba98d7a, 0x3400080}, +{0x3400000, 0xba98d7a, 0x2b94, 0xba98d7a, 0x3400080}, +{0x3400000, 0xba98d7a, 0x636d24, 0xba98d7a, 0x3400080}, +{0x3400000, 0xba98d7a, 0x7fffff, 0xba98d7a, 0x3400080}, +{0x3400000, 0xba98d7a, 0x800000, 0xba98d7c, 0x3400000}, +{0x3400000, 0xba98d7a, 0x800002, 0xba98d7d, 0x3400010}, +{0x3400000, 0xba98d7a, 0x1398437, 0xba98d80, 0x3400010}, +{0x3400000, 0xba98d7a, 0xba98d27, 0xc298d51, 0x3400010}, +{0x3400000, 0xba98d7a, 0xba98d7a, 0xc298d7a, 0x3400000}, +{0x3400000, 0xba98d7a, 0x751f853a, 0x751f853b, 0x3400010}, +{0x3400000, 0xba98d7a, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0xba98d7a, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0xba98d7a, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0xba98d7a, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xba98d7a, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xba98d7a, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xba98d7a, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xba98d7a, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xba98d7a, 0x80000000, 0xba98d7a, 0x3400000}, +{0x3400000, 0xba98d7a, 0x80000001, 0xba98d7a, 0x3400080}, +{0x3400000, 0xba98d7a, 0x80000076, 0xba98d7a, 0x3400080}, +{0x3400000, 0xba98d7a, 0x80002b94, 0xba98d7a, 0x3400080}, +{0x3400000, 0xba98d7a, 0x80636d24, 0xba98d7a, 0x3400080}, +{0x3400000, 0xba98d7a, 0x807fffff, 0xba98d7a, 0x3400080}, +{0x3400000, 0xba98d7a, 0x80800000, 0xba98d78, 0x3400000}, +{0x3400000, 0xba98d7a, 0x80800002, 0xba98d78, 0x3400010}, +{0x3400000, 0xba98d7a, 0x81398437, 0xba98d75, 0x3400010}, +{0x3400000, 0xba98d7a, 0x8ba98d27, 0x3260000, 0x3400000}, +{0x3400000, 0xba98d7a, 0x8ba98d7a, 0x0, 0x3400000}, +{0x3400000, 0xba98d7a, 0xf51f853a, 0xf51f8539, 0x3400010}, +{0x3400000, 0xba98d7a, 0xff7ffff0, 0xff7fffef, 0x3400010}, +{0x3400000, 0xba98d7a, 0xff7fffff, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xba98d7a, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0xba98d7a, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xba98d7a, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xba98d7a, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xba98d7a, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xba98d7a, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xba98d7a, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xba98d7a, 0x4f3495cb, 0x4f3495cc, 0x3400010}, +{0x3400000, 0xba98d7a, 0xe73a5134, 0xe73a5133, 0x3400010}, +{0x3400000, 0xba98d7a, 0x7c994e9e, 0x7c994e9f, 0x3400010}, +{0x3400000, 0xba98d7a, 0x6164bd6c, 0x6164bd6d, 0x3400010}, +{0x3400000, 0xba98d7a, 0x9503366, 0xbb00f16, 0x3400010}, +{0x3400000, 0xba98d7a, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0xba98d7a, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xba98d7a, 0x77f31e2f, 0x77f31e30, 0x3400010}, +{0x3400000, 0xba98d7a, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0xba98d7a, 0x966320b, 0xbb0bf0b, 0x3400010}, +{0x3400000, 0xba98d7a, 0xb26bddee, 0xb26bdded, 0x3400010}, +{0x3400000, 0xba98d7a, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0xba98d7a, 0x317285d3, 0x317285d4, 0x3400010}, +{0x3400000, 0xba98d7a, 0x3c9623b1, 0x3c9623b2, 0x3400010}, +{0x3400000, 0xba98d7a, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0xba98d7a, 0x7b906a6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x751f853a, 0x0, 0x751f853a, 0x3400000}, +{0x3400000, 0x751f853a, 0x1, 0x751f853a, 0x3400080}, +{0x3400000, 0x751f853a, 0x76, 0x751f853a, 0x3400080}, +{0x3400000, 0x751f853a, 0x2b94, 0x751f853a, 0x3400080}, +{0x3400000, 0x751f853a, 0x636d24, 0x751f853a, 0x3400080}, +{0x3400000, 0x751f853a, 0x7fffff, 0x751f853a, 0x3400080}, +{0x3400000, 0x751f853a, 0x800000, 0x751f853b, 0x3400010}, +{0x3400000, 0x751f853a, 0x800002, 0x751f853b, 0x3400010}, +{0x3400000, 0x751f853a, 0x1398437, 0x751f853b, 0x3400010}, +{0x3400000, 0x751f853a, 0xba98d27, 0x751f853b, 0x3400010}, +{0x3400000, 0x751f853a, 0xba98d7a, 0x751f853b, 0x3400010}, +{0x3400000, 0x751f853a, 0x751f853a, 0x759f853a, 0x3400000}, +{0x3400000, 0x751f853a, 0x7f7ffff0, 0x7f7ffffa, 0x3400010}, +{0x3400000, 0x751f853a, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x751f853a, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x751f853a, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x751f853a, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x751f853a, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x751f853a, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x751f853a, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x751f853a, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x751f853a, 0x80000000, 0x751f853a, 0x3400000}, +{0x3400000, 0x751f853a, 0x80000001, 0x751f853a, 0x3400080}, +{0x3400000, 0x751f853a, 0x80000076, 0x751f853a, 0x3400080}, +{0x3400000, 0x751f853a, 0x80002b94, 0x751f853a, 0x3400080}, +{0x3400000, 0x751f853a, 0x80636d24, 0x751f853a, 0x3400080}, +{0x3400000, 0x751f853a, 0x807fffff, 0x751f853a, 0x3400080}, +{0x3400000, 0x751f853a, 0x80800000, 0x751f853a, 0x3400010}, +{0x3400000, 0x751f853a, 0x80800002, 0x751f853a, 0x3400010}, +{0x3400000, 0x751f853a, 0x81398437, 0x751f853a, 0x3400010}, +{0x3400000, 0x751f853a, 0x8ba98d27, 0x751f853a, 0x3400010}, +{0x3400000, 0x751f853a, 0x8ba98d7a, 0x751f853a, 0x3400010}, +{0x3400000, 0x751f853a, 0xf51f853a, 0x0, 0x3400000}, +{0x3400000, 0x751f853a, 0xff7ffff0, 0xff7fffe6, 0x3400010}, +{0x3400000, 0x751f853a, 0xff7fffff, 0xff7ffff5, 0x3400010}, +{0x3400000, 0x751f853a, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x751f853a, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x751f853a, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x751f853a, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x751f853a, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x751f853a, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x751f853a, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x751f853a, 0x4f3495cb, 0x751f853b, 0x3400010}, +{0x3400000, 0x751f853a, 0xe73a5134, 0x751f853a, 0x3400010}, +{0x3400000, 0x751f853a, 0x7c994e9e, 0x7c994fde, 0x3400010}, +{0x3400000, 0x751f853a, 0x6164bd6c, 0x751f853b, 0x3400010}, +{0x3400000, 0x751f853a, 0x9503366, 0x751f853b, 0x3400010}, +{0x3400000, 0x751f853a, 0xbf5a97c9, 0x751f853a, 0x3400010}, +{0x3400000, 0x751f853a, 0xe6ff1a14, 0x751f853a, 0x3400010}, +{0x3400000, 0x751f853a, 0x77f31e2f, 0x77f81a59, 0x3400010}, +{0x3400000, 0x751f853a, 0xaab4d7d8, 0x751f853a, 0x3400010}, +{0x3400000, 0x751f853a, 0x966320b, 0x751f853b, 0x3400010}, +{0x3400000, 0x751f853a, 0xb26bddee, 0x751f853a, 0x3400010}, +{0x3400000, 0x751f853a, 0xb5c8e5d3, 0x751f853a, 0x3400010}, +{0x3400000, 0x751f853a, 0x317285d3, 0x751f853b, 0x3400010}, +{0x3400000, 0x751f853a, 0x3c9623b1, 0x751f853b, 0x3400010}, +{0x3400000, 0x751f853a, 0x51fd2c7c, 0x751f853b, 0x3400010}, +{0x3400000, 0x751f853a, 0x7b906a6c, 0x7b906f69, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x0, 0x7f7ffff0, 0x3400000}, +{0x3400000, 0x7f7ffff0, 0x1, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x7f7ffff0, 0x76, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x7f7ffff0, 0x2b94, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x7f7ffff0, 0x636d24, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x7f7ffff0, 0x7fffff, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x7f7ffff0, 0x800000, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x800002, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x1398437, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0xba98d27, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0xba98d7a, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x751f853a, 0x7f7ffffa, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x7f7ffff0, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7ffff0, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7ffff0, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f7ffff0, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f7ffff0, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f7ffff0, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f7ffff0, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f7ffff0, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f7ffff0, 0x80000000, 0x7f7ffff0, 0x3400000}, +{0x3400000, 0x7f7ffff0, 0x80000001, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x7f7ffff0, 0x80000076, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x7f7ffff0, 0x80002b94, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x7f7ffff0, 0x80636d24, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x7f7ffff0, 0x807fffff, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x7f7ffff0, 0x80800000, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x80800002, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x81398437, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x8ba98d27, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x8ba98d7a, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0xf51f853a, 0x7f7fffe7, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0xff7ffff0, 0x0, 0x3400000}, +{0x3400000, 0x7f7ffff0, 0xff7fffff, 0xf5700000, 0x3400000}, +{0x3400000, 0x7f7ffff0, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x7f7ffff0, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f7ffff0, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f7ffff0, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f7ffff0, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f7ffff0, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f7ffff0, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f7ffff0, 0x4f3495cb, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0xe73a5134, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x7c994e9e, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7ffff0, 0x6164bd6c, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x9503366, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0xbf5a97c9, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0xe6ff1a14, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x77f31e2f, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7ffff0, 0xaab4d7d8, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x966320b, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0xb26bddee, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0xb5c8e5d3, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x317285d3, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x3c9623b1, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x51fd2c7c, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x7f7ffff0, 0x7b906a6c, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0x0, 0x7f7fffff, 0x3400000}, +{0x3400000, 0x7f7fffff, 0x1, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x7f7fffff, 0x76, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x7f7fffff, 0x2b94, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x7f7fffff, 0x636d24, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x7f7fffff, 0x7fffff, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x7f7fffff, 0x800000, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0x800002, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0x1398437, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0xba98d27, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0xba98d7a, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0x751f853a, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0x7f7ffff0, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f7fffff, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f7fffff, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f7fffff, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f7fffff, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f7fffff, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f7fffff, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f7fffff, 0x80000000, 0x7f7fffff, 0x3400000}, +{0x3400000, 0x7f7fffff, 0x80000001, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x7f7fffff, 0x80000076, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x7f7fffff, 0x80002b94, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x7f7fffff, 0x80636d24, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x7f7fffff, 0x807fffff, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x7f7fffff, 0x80800000, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x7f7fffff, 0x80800002, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x7f7fffff, 0x81398437, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x7f7fffff, 0x8ba98d27, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x7f7fffff, 0x8ba98d7a, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x7f7fffff, 0xf51f853a, 0x7f7ffff6, 0x3400010}, +{0x3400000, 0x7f7fffff, 0xff7ffff0, 0x75700000, 0x3400000}, +{0x3400000, 0x7f7fffff, 0xff7fffff, 0x0, 0x3400000}, +{0x3400000, 0x7f7fffff, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x7f7fffff, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f7fffff, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f7fffff, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f7fffff, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f7fffff, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f7fffff, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f7fffff, 0x4f3495cb, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0xe73a5134, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x7f7fffff, 0x7c994e9e, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0x6164bd6c, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0x9503366, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0xbf5a97c9, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x7f7fffff, 0xe6ff1a14, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x7f7fffff, 0x77f31e2f, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0xaab4d7d8, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x7f7fffff, 0x966320b, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0xb26bddee, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x7f7fffff, 0xb5c8e5d3, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x7f7fffff, 0x317285d3, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0x3c9623b1, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0x51fd2c7c, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f7fffff, 0x7b906a6c, 0x7f800000, 0x3400014}, +{0x3400000, 0x7f800000, 0x0, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x1, 0x7f800000, 0x3400080}, +{0x3400000, 0x7f800000, 0x76, 0x7f800000, 0x3400080}, +{0x3400000, 0x7f800000, 0x2b94, 0x7f800000, 0x3400080}, +{0x3400000, 0x7f800000, 0x636d24, 0x7f800000, 0x3400080}, +{0x3400000, 0x7f800000, 0x7fffff, 0x7f800000, 0x3400080}, +{0x3400000, 0x7f800000, 0x800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x800002, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x1398437, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0xba98d27, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0xba98d7a, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x751f853a, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x7f7ffff0, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x7f7fffff, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800000, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800000, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800000, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f800000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f800000, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f800000, 0x80000000, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x80000001, 0x7f800000, 0x3400080}, +{0x3400000, 0x7f800000, 0x80000076, 0x7f800000, 0x3400080}, +{0x3400000, 0x7f800000, 0x80002b94, 0x7f800000, 0x3400080}, +{0x3400000, 0x7f800000, 0x80636d24, 0x7f800000, 0x3400080}, +{0x3400000, 0x7f800000, 0x807fffff, 0x7f800000, 0x3400080}, +{0x3400000, 0x7f800000, 0x80800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x80800002, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x81398437, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x8ba98d27, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x8ba98d7a, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0xf51f853a, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0xff7ffff0, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0xff7fffff, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0xff800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800000, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800000, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800000, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800000, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f800000, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f800000, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7f800000, 0x4f3495cb, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0xe73a5134, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x7c994e9e, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x6164bd6c, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x9503366, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0xbf5a97c9, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0xe6ff1a14, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x77f31e2f, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0xaab4d7d8, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x966320b, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0xb26bddee, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0xb5c8e5d3, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x317285d3, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x3c9623b1, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x51fd2c7c, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800000, 0x7b906a6c, 0x7f800000, 0x3400000}, +{0x3400000, 0x7f800001, 0x0, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x1, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f800001, 0x76, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f800001, 0x2b94, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f800001, 0x636d24, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f800001, 0x7fffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f800001, 0x800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x800002, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x1398437, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xba98d27, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xba98d7a, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x751f853a, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x7f7ffff0, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x7f7fffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x7f800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x7fc00000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x7fd9ba98, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x7fffffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x80000000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x80000001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f800001, 0x80000076, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f800001, 0x80002b94, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f800001, 0x80636d24, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f800001, 0x807fffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f800001, 0x80800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x80800002, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x81398437, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x8ba98d27, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x8ba98d7a, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xf51f853a, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xff7ffff0, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xff7fffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xff800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xffc00000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xffd9ba98, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xffffffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x4f3495cb, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xe73a5134, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x7c994e9e, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x6164bd6c, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x9503366, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xbf5a97c9, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xe6ff1a14, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x77f31e2f, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xaab4d7d8, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x966320b, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xb26bddee, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0xb5c8e5d3, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x317285d3, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x3c9623b1, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x51fd2c7c, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f800001, 0x7b906a6c, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x0, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x1, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f984a37, 0x76, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f984a37, 0x2b94, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f984a37, 0x636d24, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f984a37, 0x7fffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f984a37, 0x800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x800002, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x1398437, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xba98d27, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xba98d7a, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x751f853a, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x7f7ffff0, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x7f7fffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x7f800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x7fc00000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x7fd9ba98, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x7fffffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x80000000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x80000001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f984a37, 0x80000076, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f984a37, 0x80002b94, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f984a37, 0x80636d24, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f984a37, 0x807fffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7f984a37, 0x80800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x80800002, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x81398437, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x8ba98d27, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x8ba98d7a, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xf51f853a, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xff7ffff0, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xff7fffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xff800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xffc00000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xffd9ba98, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xffffffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x4f3495cb, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xe73a5134, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x7c994e9e, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x6164bd6c, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x9503366, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xbf5a97c9, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xe6ff1a14, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x77f31e2f, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xaab4d7d8, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x966320b, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xb26bddee, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0xb5c8e5d3, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x317285d3, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x3c9623b1, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x51fd2c7c, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7f984a37, 0x7b906a6c, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x0, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x1, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fbfffff, 0x76, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fbfffff, 0x2b94, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fbfffff, 0x636d24, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fbfffff, 0x7fffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fbfffff, 0x800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x800002, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x1398437, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xba98d27, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xba98d7a, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x751f853a, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x7f7ffff0, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x7f7fffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x7f800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x7fc00000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x7fd9ba98, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x7fffffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x80000000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x80000001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fbfffff, 0x80000076, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fbfffff, 0x80002b94, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fbfffff, 0x80636d24, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fbfffff, 0x807fffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x7fbfffff, 0x80800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x80800002, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x81398437, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x8ba98d27, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x8ba98d7a, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xf51f853a, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xff7ffff0, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xff7fffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xff800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xffc00000, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xffd9ba98, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xffffffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x4f3495cb, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xe73a5134, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x7c994e9e, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x6164bd6c, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x9503366, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xbf5a97c9, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xe6ff1a14, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x77f31e2f, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xaab4d7d8, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x966320b, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xb26bddee, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x317285d3, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x3c9623b1, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x51fd2c7c, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fbfffff, 0x7b906a6c, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fc00000, 0x0, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x1, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fc00000, 0x76, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fc00000, 0x2b94, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fc00000, 0x636d24, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fc00000, 0x7fffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fc00000, 0x800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x800002, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x1398437, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xba98d27, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xba98d7a, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x751f853a, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x7f7ffff0, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x7f7fffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x7f800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fc00000, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fc00000, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fc00000, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x80000000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x80000001, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fc00000, 0x80000076, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fc00000, 0x80002b94, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fc00000, 0x80636d24, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fc00000, 0x807fffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fc00000, 0x80800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x80800002, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x81398437, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x8ba98d27, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x8ba98d7a, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xf51f853a, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xff7ffff0, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xff7fffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xff800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fc00000, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fc00000, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fc00000, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x4f3495cb, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xe73a5134, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x7c994e9e, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x6164bd6c, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x9503366, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xbf5a97c9, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xe6ff1a14, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x77f31e2f, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xaab4d7d8, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x966320b, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xb26bddee, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0xb5c8e5d3, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x317285d3, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x3c9623b1, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x51fd2c7c, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fc00000, 0x7b906a6c, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x0, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x1, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fd9ba98, 0x76, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fd9ba98, 0x2b94, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fd9ba98, 0x636d24, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fd9ba98, 0x7fffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fd9ba98, 0x800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x800002, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x1398437, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xba98d27, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xba98d7a, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x751f853a, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x7f7fffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x7f800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fd9ba98, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fd9ba98, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fd9ba98, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x80000000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x80000001, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fd9ba98, 0x80000076, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fd9ba98, 0x80002b94, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fd9ba98, 0x80636d24, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fd9ba98, 0x807fffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fd9ba98, 0x80800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x80800002, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x81398437, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x8ba98d27, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xf51f853a, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xff7ffff0, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xff7fffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xff800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fd9ba98, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fd9ba98, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fd9ba98, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x4f3495cb, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xe73a5134, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x7c994e9e, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x6164bd6c, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x9503366, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x77f31e2f, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x966320b, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xb26bddee, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x317285d3, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x3c9623b1, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fd9ba98, 0x7b906a6c, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x0, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x1, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffffff, 0x76, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffffff, 0x2b94, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffffff, 0x636d24, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffffff, 0x7fffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffffff, 0x800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x800002, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x1398437, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xba98d27, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xba98d7a, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x751f853a, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x7f7ffff0, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x7f7fffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x7f800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fffffff, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fffffff, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fffffff, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x80000000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x80000001, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffffff, 0x80000076, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffffff, 0x80002b94, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffffff, 0x80636d24, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffffff, 0x807fffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x7fffffff, 0x80800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x80800002, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x81398437, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x8ba98d27, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x8ba98d7a, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xf51f853a, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xff7ffff0, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xff7fffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xff800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fffffff, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fffffff, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7fffffff, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x4f3495cb, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xe73a5134, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x7c994e9e, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x6164bd6c, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x9503366, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xbf5a97c9, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xe6ff1a14, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x77f31e2f, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xaab4d7d8, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x966320b, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xb26bddee, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0xb5c8e5d3, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x317285d3, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x3c9623b1, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x51fd2c7c, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7fffffff, 0x7b906a6c, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80000000, 0x0, 0x0, 0x3400000}, +{0x3400000, 0x80000000, 0x1, 0x0, 0x3400080}, +{0x3400000, 0x80000000, 0x76, 0x0, 0x3400080}, +{0x3400000, 0x80000000, 0x2b94, 0x0, 0x3400080}, +{0x3400000, 0x80000000, 0x636d24, 0x0, 0x3400080}, +{0x3400000, 0x80000000, 0x7fffff, 0x0, 0x3400080}, +{0x3400000, 0x80000000, 0x800000, 0x800000, 0x3400000}, +{0x3400000, 0x80000000, 0x800002, 0x800002, 0x3400000}, +{0x3400000, 0x80000000, 0x1398437, 0x1398437, 0x3400000}, +{0x3400000, 0x80000000, 0xba98d27, 0xba98d27, 0x3400000}, +{0x3400000, 0x80000000, 0xba98d7a, 0xba98d7a, 0x3400000}, +{0x3400000, 0x80000000, 0x751f853a, 0x751f853a, 0x3400000}, +{0x3400000, 0x80000000, 0x7f7ffff0, 0x7f7ffff0, 0x3400000}, +{0x3400000, 0x80000000, 0x7f7fffff, 0x7f7fffff, 0x3400000}, +{0x3400000, 0x80000000, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x80000000, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80000000, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80000000, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80000000, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80000000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80000000, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80000000, 0x80000000, 0x80000000, 0x3400000}, +{0x3400000, 0x80000000, 0x80000001, 0x0, 0x3400080}, +{0x3400000, 0x80000000, 0x80000076, 0x0, 0x3400080}, +{0x3400000, 0x80000000, 0x80002b94, 0x0, 0x3400080}, +{0x3400000, 0x80000000, 0x80636d24, 0x0, 0x3400080}, +{0x3400000, 0x80000000, 0x807fffff, 0x0, 0x3400080}, +{0x3400000, 0x80000000, 0x80800000, 0x80800000, 0x3400000}, +{0x3400000, 0x80000000, 0x80800002, 0x80800002, 0x3400000}, +{0x3400000, 0x80000000, 0x81398437, 0x81398437, 0x3400000}, +{0x3400000, 0x80000000, 0x8ba98d27, 0x8ba98d27, 0x3400000}, +{0x3400000, 0x80000000, 0x8ba98d7a, 0x8ba98d7a, 0x3400000}, +{0x3400000, 0x80000000, 0xf51f853a, 0xf51f853a, 0x3400000}, +{0x3400000, 0x80000000, 0xff7ffff0, 0xff7ffff0, 0x3400000}, +{0x3400000, 0x80000000, 0xff7fffff, 0xff7fffff, 0x3400000}, +{0x3400000, 0x80000000, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x80000000, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80000000, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80000000, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80000000, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80000000, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80000000, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80000000, 0x4f3495cb, 0x4f3495cb, 0x3400000}, +{0x3400000, 0x80000000, 0xe73a5134, 0xe73a5134, 0x3400000}, +{0x3400000, 0x80000000, 0x7c994e9e, 0x7c994e9e, 0x3400000}, +{0x3400000, 0x80000000, 0x6164bd6c, 0x6164bd6c, 0x3400000}, +{0x3400000, 0x80000000, 0x9503366, 0x9503366, 0x3400000}, +{0x3400000, 0x80000000, 0xbf5a97c9, 0xbf5a97c9, 0x3400000}, +{0x3400000, 0x80000000, 0xe6ff1a14, 0xe6ff1a14, 0x3400000}, +{0x3400000, 0x80000000, 0x77f31e2f, 0x77f31e2f, 0x3400000}, +{0x3400000, 0x80000000, 0xaab4d7d8, 0xaab4d7d8, 0x3400000}, +{0x3400000, 0x80000000, 0x966320b, 0x966320b, 0x3400000}, +{0x3400000, 0x80000000, 0xb26bddee, 0xb26bddee, 0x3400000}, +{0x3400000, 0x80000000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400000}, +{0x3400000, 0x80000000, 0x317285d3, 0x317285d3, 0x3400000}, +{0x3400000, 0x80000000, 0x3c9623b1, 0x3c9623b1, 0x3400000}, +{0x3400000, 0x80000000, 0x51fd2c7c, 0x51fd2c7c, 0x3400000}, +{0x3400000, 0x80000000, 0x7b906a6c, 0x7b906a6c, 0x3400000}, +{0x3400000, 0x80000001, 0x0, 0x0, 0x3400080}, +{0x3400000, 0x80000001, 0x1, 0x0, 0x3400080}, +{0x3400000, 0x80000001, 0x76, 0x0, 0x3400080}, +{0x3400000, 0x80000001, 0x2b94, 0x0, 0x3400080}, +{0x3400000, 0x80000001, 0x636d24, 0x0, 0x3400080}, +{0x3400000, 0x80000001, 0x7fffff, 0x0, 0x3400080}, +{0x3400000, 0x80000001, 0x800000, 0x800000, 0x3400080}, +{0x3400000, 0x80000001, 0x800002, 0x800002, 0x3400080}, +{0x3400000, 0x80000001, 0x1398437, 0x1398437, 0x3400080}, +{0x3400000, 0x80000001, 0xba98d27, 0xba98d27, 0x3400080}, +{0x3400000, 0x80000001, 0xba98d7a, 0xba98d7a, 0x3400080}, +{0x3400000, 0x80000001, 0x751f853a, 0x751f853a, 0x3400080}, +{0x3400000, 0x80000001, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x80000001, 0x7f7fffff, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x80000001, 0x7f800000, 0x7f800000, 0x3400080}, +{0x3400000, 0x80000001, 0x7f800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80000001, 0x7f984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80000001, 0x7fbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80000001, 0x7fc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80000001, 0x7fd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80000001, 0x7fffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80000001, 0x80000000, 0x0, 0x3400080}, +{0x3400000, 0x80000001, 0x80000001, 0x0, 0x3400080}, +{0x3400000, 0x80000001, 0x80000076, 0x0, 0x3400080}, +{0x3400000, 0x80000001, 0x80002b94, 0x0, 0x3400080}, +{0x3400000, 0x80000001, 0x80636d24, 0x0, 0x3400080}, +{0x3400000, 0x80000001, 0x807fffff, 0x0, 0x3400080}, +{0x3400000, 0x80000001, 0x80800000, 0x80800000, 0x3400080}, +{0x3400000, 0x80000001, 0x80800002, 0x80800002, 0x3400080}, +{0x3400000, 0x80000001, 0x81398437, 0x81398437, 0x3400080}, +{0x3400000, 0x80000001, 0x8ba98d27, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x80000001, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x80000001, 0xf51f853a, 0xf51f853a, 0x3400080}, +{0x3400000, 0x80000001, 0xff7ffff0, 0xff7ffff0, 0x3400080}, +{0x3400000, 0x80000001, 0xff7fffff, 0xff7fffff, 0x3400080}, +{0x3400000, 0x80000001, 0xff800000, 0xff800000, 0x3400080}, +{0x3400000, 0x80000001, 0xff800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80000001, 0xff984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80000001, 0xffbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80000001, 0xffc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80000001, 0xffd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80000001, 0xffffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80000001, 0x4f3495cb, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x80000001, 0xe73a5134, 0xe73a5134, 0x3400080}, +{0x3400000, 0x80000001, 0x7c994e9e, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x80000001, 0x6164bd6c, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x80000001, 0x9503366, 0x9503366, 0x3400080}, +{0x3400000, 0x80000001, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0x80000001, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0x80000001, 0x77f31e2f, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x80000001, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0x80000001, 0x966320b, 0x966320b, 0x3400080}, +{0x3400000, 0x80000001, 0xb26bddee, 0xb26bddee, 0x3400080}, +{0x3400000, 0x80000001, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0x80000001, 0x317285d3, 0x317285d3, 0x3400080}, +{0x3400000, 0x80000001, 0x3c9623b1, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x80000001, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x80000001, 0x7b906a6c, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x80000076, 0x0, 0x0, 0x3400080}, +{0x3400000, 0x80000076, 0x1, 0x0, 0x3400080}, +{0x3400000, 0x80000076, 0x76, 0x0, 0x3400080}, +{0x3400000, 0x80000076, 0x2b94, 0x0, 0x3400080}, +{0x3400000, 0x80000076, 0x636d24, 0x0, 0x3400080}, +{0x3400000, 0x80000076, 0x7fffff, 0x0, 0x3400080}, +{0x3400000, 0x80000076, 0x800000, 0x800000, 0x3400080}, +{0x3400000, 0x80000076, 0x800002, 0x800002, 0x3400080}, +{0x3400000, 0x80000076, 0x1398437, 0x1398437, 0x3400080}, +{0x3400000, 0x80000076, 0xba98d27, 0xba98d27, 0x3400080}, +{0x3400000, 0x80000076, 0xba98d7a, 0xba98d7a, 0x3400080}, +{0x3400000, 0x80000076, 0x751f853a, 0x751f853a, 0x3400080}, +{0x3400000, 0x80000076, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x80000076, 0x7f7fffff, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x80000076, 0x7f800000, 0x7f800000, 0x3400080}, +{0x3400000, 0x80000076, 0x7f800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80000076, 0x7f984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80000076, 0x7fbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80000076, 0x7fc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80000076, 0x7fd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80000076, 0x7fffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80000076, 0x80000000, 0x0, 0x3400080}, +{0x3400000, 0x80000076, 0x80000001, 0x0, 0x3400080}, +{0x3400000, 0x80000076, 0x80000076, 0x0, 0x3400080}, +{0x3400000, 0x80000076, 0x80002b94, 0x0, 0x3400080}, +{0x3400000, 0x80000076, 0x80636d24, 0x0, 0x3400080}, +{0x3400000, 0x80000076, 0x807fffff, 0x0, 0x3400080}, +{0x3400000, 0x80000076, 0x80800000, 0x80800000, 0x3400080}, +{0x3400000, 0x80000076, 0x80800002, 0x80800002, 0x3400080}, +{0x3400000, 0x80000076, 0x81398437, 0x81398437, 0x3400080}, +{0x3400000, 0x80000076, 0x8ba98d27, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x80000076, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x80000076, 0xf51f853a, 0xf51f853a, 0x3400080}, +{0x3400000, 0x80000076, 0xff7ffff0, 0xff7ffff0, 0x3400080}, +{0x3400000, 0x80000076, 0xff7fffff, 0xff7fffff, 0x3400080}, +{0x3400000, 0x80000076, 0xff800000, 0xff800000, 0x3400080}, +{0x3400000, 0x80000076, 0xff800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80000076, 0xff984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80000076, 0xffbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80000076, 0xffc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80000076, 0xffd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80000076, 0xffffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80000076, 0x4f3495cb, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x80000076, 0xe73a5134, 0xe73a5134, 0x3400080}, +{0x3400000, 0x80000076, 0x7c994e9e, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x80000076, 0x6164bd6c, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x80000076, 0x9503366, 0x9503366, 0x3400080}, +{0x3400000, 0x80000076, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0x80000076, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0x80000076, 0x77f31e2f, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x80000076, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0x80000076, 0x966320b, 0x966320b, 0x3400080}, +{0x3400000, 0x80000076, 0xb26bddee, 0xb26bddee, 0x3400080}, +{0x3400000, 0x80000076, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0x80000076, 0x317285d3, 0x317285d3, 0x3400080}, +{0x3400000, 0x80000076, 0x3c9623b1, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x80000076, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x80000076, 0x7b906a6c, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x80002b94, 0x0, 0x0, 0x3400080}, +{0x3400000, 0x80002b94, 0x1, 0x0, 0x3400080}, +{0x3400000, 0x80002b94, 0x76, 0x0, 0x3400080}, +{0x3400000, 0x80002b94, 0x2b94, 0x0, 0x3400080}, +{0x3400000, 0x80002b94, 0x636d24, 0x0, 0x3400080}, +{0x3400000, 0x80002b94, 0x7fffff, 0x0, 0x3400080}, +{0x3400000, 0x80002b94, 0x800000, 0x800000, 0x3400080}, +{0x3400000, 0x80002b94, 0x800002, 0x800002, 0x3400080}, +{0x3400000, 0x80002b94, 0x1398437, 0x1398437, 0x3400080}, +{0x3400000, 0x80002b94, 0xba98d27, 0xba98d27, 0x3400080}, +{0x3400000, 0x80002b94, 0xba98d7a, 0xba98d7a, 0x3400080}, +{0x3400000, 0x80002b94, 0x751f853a, 0x751f853a, 0x3400080}, +{0x3400000, 0x80002b94, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x80002b94, 0x7f7fffff, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x80002b94, 0x7f800000, 0x7f800000, 0x3400080}, +{0x3400000, 0x80002b94, 0x7f800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80002b94, 0x7f984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80002b94, 0x7fbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80002b94, 0x7fc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80002b94, 0x7fd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80002b94, 0x7fffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80002b94, 0x80000000, 0x0, 0x3400080}, +{0x3400000, 0x80002b94, 0x80000001, 0x0, 0x3400080}, +{0x3400000, 0x80002b94, 0x80000076, 0x0, 0x3400080}, +{0x3400000, 0x80002b94, 0x80002b94, 0x0, 0x3400080}, +{0x3400000, 0x80002b94, 0x80636d24, 0x0, 0x3400080}, +{0x3400000, 0x80002b94, 0x807fffff, 0x0, 0x3400080}, +{0x3400000, 0x80002b94, 0x80800000, 0x80800000, 0x3400080}, +{0x3400000, 0x80002b94, 0x80800002, 0x80800002, 0x3400080}, +{0x3400000, 0x80002b94, 0x81398437, 0x81398437, 0x3400080}, +{0x3400000, 0x80002b94, 0x8ba98d27, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x80002b94, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x80002b94, 0xf51f853a, 0xf51f853a, 0x3400080}, +{0x3400000, 0x80002b94, 0xff7ffff0, 0xff7ffff0, 0x3400080}, +{0x3400000, 0x80002b94, 0xff7fffff, 0xff7fffff, 0x3400080}, +{0x3400000, 0x80002b94, 0xff800000, 0xff800000, 0x3400080}, +{0x3400000, 0x80002b94, 0xff800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80002b94, 0xff984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80002b94, 0xffbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80002b94, 0xffc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80002b94, 0xffd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80002b94, 0xffffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80002b94, 0x4f3495cb, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x80002b94, 0xe73a5134, 0xe73a5134, 0x3400080}, +{0x3400000, 0x80002b94, 0x7c994e9e, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x80002b94, 0x6164bd6c, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x80002b94, 0x9503366, 0x9503366, 0x3400080}, +{0x3400000, 0x80002b94, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0x80002b94, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0x80002b94, 0x77f31e2f, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x80002b94, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0x80002b94, 0x966320b, 0x966320b, 0x3400080}, +{0x3400000, 0x80002b94, 0xb26bddee, 0xb26bddee, 0x3400080}, +{0x3400000, 0x80002b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0x80002b94, 0x317285d3, 0x317285d3, 0x3400080}, +{0x3400000, 0x80002b94, 0x3c9623b1, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x80002b94, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x80002b94, 0x7b906a6c, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x80636d24, 0x0, 0x0, 0x3400080}, +{0x3400000, 0x80636d24, 0x1, 0x0, 0x3400080}, +{0x3400000, 0x80636d24, 0x76, 0x0, 0x3400080}, +{0x3400000, 0x80636d24, 0x2b94, 0x0, 0x3400080}, +{0x3400000, 0x80636d24, 0x636d24, 0x0, 0x3400080}, +{0x3400000, 0x80636d24, 0x7fffff, 0x0, 0x3400080}, +{0x3400000, 0x80636d24, 0x800000, 0x800000, 0x3400080}, +{0x3400000, 0x80636d24, 0x800002, 0x800002, 0x3400080}, +{0x3400000, 0x80636d24, 0x1398437, 0x1398437, 0x3400080}, +{0x3400000, 0x80636d24, 0xba98d27, 0xba98d27, 0x3400080}, +{0x3400000, 0x80636d24, 0xba98d7a, 0xba98d7a, 0x3400080}, +{0x3400000, 0x80636d24, 0x751f853a, 0x751f853a, 0x3400080}, +{0x3400000, 0x80636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x80636d24, 0x7f7fffff, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x80636d24, 0x7f800000, 0x7f800000, 0x3400080}, +{0x3400000, 0x80636d24, 0x7f800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80636d24, 0x7f984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80636d24, 0x7fbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80636d24, 0x7fc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80636d24, 0x7fd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80636d24, 0x7fffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80636d24, 0x80000000, 0x0, 0x3400080}, +{0x3400000, 0x80636d24, 0x80000001, 0x0, 0x3400080}, +{0x3400000, 0x80636d24, 0x80000076, 0x0, 0x3400080}, +{0x3400000, 0x80636d24, 0x80002b94, 0x0, 0x3400080}, +{0x3400000, 0x80636d24, 0x80636d24, 0x0, 0x3400080}, +{0x3400000, 0x80636d24, 0x807fffff, 0x0, 0x3400080}, +{0x3400000, 0x80636d24, 0x80800000, 0x80800000, 0x3400080}, +{0x3400000, 0x80636d24, 0x80800002, 0x80800002, 0x3400080}, +{0x3400000, 0x80636d24, 0x81398437, 0x81398437, 0x3400080}, +{0x3400000, 0x80636d24, 0x8ba98d27, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x80636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x80636d24, 0xf51f853a, 0xf51f853a, 0x3400080}, +{0x3400000, 0x80636d24, 0xff7ffff0, 0xff7ffff0, 0x3400080}, +{0x3400000, 0x80636d24, 0xff7fffff, 0xff7fffff, 0x3400080}, +{0x3400000, 0x80636d24, 0xff800000, 0xff800000, 0x3400080}, +{0x3400000, 0x80636d24, 0xff800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80636d24, 0xff984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80636d24, 0xffbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x80636d24, 0xffc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80636d24, 0xffd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80636d24, 0xffffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x80636d24, 0x4f3495cb, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x80636d24, 0xe73a5134, 0xe73a5134, 0x3400080}, +{0x3400000, 0x80636d24, 0x7c994e9e, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x80636d24, 0x6164bd6c, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x80636d24, 0x9503366, 0x9503366, 0x3400080}, +{0x3400000, 0x80636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0x80636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0x80636d24, 0x77f31e2f, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x80636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0x80636d24, 0x966320b, 0x966320b, 0x3400080}, +{0x3400000, 0x80636d24, 0xb26bddee, 0xb26bddee, 0x3400080}, +{0x3400000, 0x80636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0x80636d24, 0x317285d3, 0x317285d3, 0x3400080}, +{0x3400000, 0x80636d24, 0x3c9623b1, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x80636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x80636d24, 0x7b906a6c, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x807fffff, 0x0, 0x0, 0x3400080}, +{0x3400000, 0x807fffff, 0x1, 0x0, 0x3400080}, +{0x3400000, 0x807fffff, 0x76, 0x0, 0x3400080}, +{0x3400000, 0x807fffff, 0x2b94, 0x0, 0x3400080}, +{0x3400000, 0x807fffff, 0x636d24, 0x0, 0x3400080}, +{0x3400000, 0x807fffff, 0x7fffff, 0x0, 0x3400080}, +{0x3400000, 0x807fffff, 0x800000, 0x800000, 0x3400080}, +{0x3400000, 0x807fffff, 0x800002, 0x800002, 0x3400080}, +{0x3400000, 0x807fffff, 0x1398437, 0x1398437, 0x3400080}, +{0x3400000, 0x807fffff, 0xba98d27, 0xba98d27, 0x3400080}, +{0x3400000, 0x807fffff, 0xba98d7a, 0xba98d7a, 0x3400080}, +{0x3400000, 0x807fffff, 0x751f853a, 0x751f853a, 0x3400080}, +{0x3400000, 0x807fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3400080}, +{0x3400000, 0x807fffff, 0x7f7fffff, 0x7f7fffff, 0x3400080}, +{0x3400000, 0x807fffff, 0x7f800000, 0x7f800000, 0x3400080}, +{0x3400000, 0x807fffff, 0x7f800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x807fffff, 0x7f984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x807fffff, 0x7fbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x807fffff, 0x7fc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x807fffff, 0x7fd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x807fffff, 0x7fffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x807fffff, 0x80000000, 0x0, 0x3400080}, +{0x3400000, 0x807fffff, 0x80000001, 0x0, 0x3400080}, +{0x3400000, 0x807fffff, 0x80000076, 0x0, 0x3400080}, +{0x3400000, 0x807fffff, 0x80002b94, 0x0, 0x3400080}, +{0x3400000, 0x807fffff, 0x80636d24, 0x0, 0x3400080}, +{0x3400000, 0x807fffff, 0x807fffff, 0x0, 0x3400080}, +{0x3400000, 0x807fffff, 0x80800000, 0x80800000, 0x3400080}, +{0x3400000, 0x807fffff, 0x80800002, 0x80800002, 0x3400080}, +{0x3400000, 0x807fffff, 0x81398437, 0x81398437, 0x3400080}, +{0x3400000, 0x807fffff, 0x8ba98d27, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x807fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x807fffff, 0xf51f853a, 0xf51f853a, 0x3400080}, +{0x3400000, 0x807fffff, 0xff7ffff0, 0xff7ffff0, 0x3400080}, +{0x3400000, 0x807fffff, 0xff7fffff, 0xff7fffff, 0x3400080}, +{0x3400000, 0x807fffff, 0xff800000, 0xff800000, 0x3400080}, +{0x3400000, 0x807fffff, 0xff800001, 0x7fc00000, 0x3400081}, +{0x3400000, 0x807fffff, 0xff984a37, 0x7fc00000, 0x3400081}, +{0x3400000, 0x807fffff, 0xffbfffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0x807fffff, 0xffc00000, 0x7fc00000, 0x3400080}, +{0x3400000, 0x807fffff, 0xffd9ba98, 0x7fc00000, 0x3400080}, +{0x3400000, 0x807fffff, 0xffffffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0x807fffff, 0x4f3495cb, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x807fffff, 0xe73a5134, 0xe73a5134, 0x3400080}, +{0x3400000, 0x807fffff, 0x7c994e9e, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x807fffff, 0x6164bd6c, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x807fffff, 0x9503366, 0x9503366, 0x3400080}, +{0x3400000, 0x807fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0x807fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0x807fffff, 0x77f31e2f, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x807fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0x807fffff, 0x966320b, 0x966320b, 0x3400080}, +{0x3400000, 0x807fffff, 0xb26bddee, 0xb26bddee, 0x3400080}, +{0x3400000, 0x807fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0x807fffff, 0x317285d3, 0x317285d3, 0x3400080}, +{0x3400000, 0x807fffff, 0x3c9623b1, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x807fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x807fffff, 0x7b906a6c, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x80800000, 0x0, 0x80800000, 0x3400000}, +{0x3400000, 0x80800000, 0x1, 0x80800000, 0x3400080}, +{0x3400000, 0x80800000, 0x76, 0x80800000, 0x3400080}, +{0x3400000, 0x80800000, 0x2b94, 0x80800000, 0x3400080}, +{0x3400000, 0x80800000, 0x636d24, 0x80800000, 0x3400080}, +{0x3400000, 0x80800000, 0x7fffff, 0x80800000, 0x3400080}, +{0x3400000, 0x80800000, 0x800000, 0x0, 0x3400000}, +{0x3400000, 0x80800000, 0x800002, 0x0, 0x3400008}, +{0x3400000, 0x80800000, 0x1398437, 0xf3086e, 0x3400000}, +{0x3400000, 0x80800000, 0xba98d27, 0xba98d25, 0x3400000}, +{0x3400000, 0x80800000, 0xba98d7a, 0xba98d78, 0x3400000}, +{0x3400000, 0x80800000, 0x751f853a, 0x751f853a, 0x3400010}, +{0x3400000, 0x80800000, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x80800000, 0x7f7fffff, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x80800000, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x80800000, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80800000, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80800000, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80800000, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80800000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80800000, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80800000, 0x80000000, 0x80800000, 0x3400000}, +{0x3400000, 0x80800000, 0x80000001, 0x80800000, 0x3400080}, +{0x3400000, 0x80800000, 0x80000076, 0x80800000, 0x3400080}, +{0x3400000, 0x80800000, 0x80002b94, 0x80800000, 0x3400080}, +{0x3400000, 0x80800000, 0x80636d24, 0x80800000, 0x3400080}, +{0x3400000, 0x80800000, 0x807fffff, 0x80800000, 0x3400080}, +{0x3400000, 0x80800000, 0x80800000, 0x81000000, 0x3400000}, +{0x3400000, 0x80800000, 0x80800002, 0x81000001, 0x3400000}, +{0x3400000, 0x80800000, 0x81398437, 0x81798437, 0x3400000}, +{0x3400000, 0x80800000, 0x8ba98d27, 0x8ba98d29, 0x3400000}, +{0x3400000, 0x80800000, 0x8ba98d7a, 0x8ba98d7c, 0x3400000}, +{0x3400000, 0x80800000, 0xf51f853a, 0xf51f853a, 0x3400010}, +{0x3400000, 0x80800000, 0xff7ffff0, 0xff7ffff0, 0x3400010}, +{0x3400000, 0x80800000, 0xff7fffff, 0xff7fffff, 0x3400010}, +{0x3400000, 0x80800000, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x80800000, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80800000, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80800000, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80800000, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80800000, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80800000, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80800000, 0x4f3495cb, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x80800000, 0xe73a5134, 0xe73a5134, 0x3400010}, +{0x3400000, 0x80800000, 0x7c994e9e, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x80800000, 0x6164bd6c, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x80800000, 0x9503366, 0x9503326, 0x3400000}, +{0x3400000, 0x80800000, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0x80800000, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0x80800000, 0x77f31e2f, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x80800000, 0xaab4d7d8, 0xaab4d7d8, 0x3400010}, +{0x3400000, 0x80800000, 0x966320b, 0x96631cb, 0x3400000}, +{0x3400000, 0x80800000, 0xb26bddee, 0xb26bddee, 0x3400010}, +{0x3400000, 0x80800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010}, +{0x3400000, 0x80800000, 0x317285d3, 0x317285d3, 0x3400010}, +{0x3400000, 0x80800000, 0x3c9623b1, 0x3c9623b1, 0x3400010}, +{0x3400000, 0x80800000, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x80800000, 0x7b906a6c, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x80800002, 0x0, 0x80800002, 0x3400000}, +{0x3400000, 0x80800002, 0x1, 0x80800002, 0x3400080}, +{0x3400000, 0x80800002, 0x76, 0x80800002, 0x3400080}, +{0x3400000, 0x80800002, 0x2b94, 0x80800002, 0x3400080}, +{0x3400000, 0x80800002, 0x636d24, 0x80800002, 0x3400080}, +{0x3400000, 0x80800002, 0x7fffff, 0x80800002, 0x3400080}, +{0x3400000, 0x80800002, 0x800000, 0x0, 0x3400008}, +{0x3400000, 0x80800002, 0x800002, 0x0, 0x3400000}, +{0x3400000, 0x80800002, 0x1398437, 0xf3086c, 0x3400000}, +{0x3400000, 0x80800002, 0xba98d27, 0xba98d25, 0x3400010}, +{0x3400000, 0x80800002, 0xba98d7a, 0xba98d78, 0x3400010}, +{0x3400000, 0x80800002, 0x751f853a, 0x751f853a, 0x3400010}, +{0x3400000, 0x80800002, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x80800002, 0x7f7fffff, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x80800002, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x80800002, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80800002, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80800002, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80800002, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80800002, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80800002, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80800002, 0x80000000, 0x80800002, 0x3400000}, +{0x3400000, 0x80800002, 0x80000001, 0x80800002, 0x3400080}, +{0x3400000, 0x80800002, 0x80000076, 0x80800002, 0x3400080}, +{0x3400000, 0x80800002, 0x80002b94, 0x80800002, 0x3400080}, +{0x3400000, 0x80800002, 0x80636d24, 0x80800002, 0x3400080}, +{0x3400000, 0x80800002, 0x807fffff, 0x80800002, 0x3400080}, +{0x3400000, 0x80800002, 0x80800000, 0x81000001, 0x3400000}, +{0x3400000, 0x80800002, 0x80800002, 0x81000002, 0x3400000}, +{0x3400000, 0x80800002, 0x81398437, 0x81798438, 0x3400000}, +{0x3400000, 0x80800002, 0x8ba98d27, 0x8ba98d29, 0x3400010}, +{0x3400000, 0x80800002, 0x8ba98d7a, 0x8ba98d7c, 0x3400010}, +{0x3400000, 0x80800002, 0xf51f853a, 0xf51f853a, 0x3400010}, +{0x3400000, 0x80800002, 0xff7ffff0, 0xff7ffff0, 0x3400010}, +{0x3400000, 0x80800002, 0xff7fffff, 0xff7fffff, 0x3400010}, +{0x3400000, 0x80800002, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x80800002, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80800002, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80800002, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x80800002, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80800002, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80800002, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x80800002, 0x4f3495cb, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x80800002, 0xe73a5134, 0xe73a5134, 0x3400010}, +{0x3400000, 0x80800002, 0x7c994e9e, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x80800002, 0x6164bd6c, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x80800002, 0x9503366, 0x9503326, 0x3400010}, +{0x3400000, 0x80800002, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0x80800002, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0x80800002, 0x77f31e2f, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x80800002, 0xaab4d7d8, 0xaab4d7d8, 0x3400010}, +{0x3400000, 0x80800002, 0x966320b, 0x96631cb, 0x3400010}, +{0x3400000, 0x80800002, 0xb26bddee, 0xb26bddee, 0x3400010}, +{0x3400000, 0x80800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010}, +{0x3400000, 0x80800002, 0x317285d3, 0x317285d3, 0x3400010}, +{0x3400000, 0x80800002, 0x3c9623b1, 0x3c9623b1, 0x3400010}, +{0x3400000, 0x80800002, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x80800002, 0x7b906a6c, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x81398437, 0x0, 0x81398437, 0x3400000}, +{0x3400000, 0x81398437, 0x1, 0x81398437, 0x3400080}, +{0x3400000, 0x81398437, 0x76, 0x81398437, 0x3400080}, +{0x3400000, 0x81398437, 0x2b94, 0x81398437, 0x3400080}, +{0x3400000, 0x81398437, 0x636d24, 0x81398437, 0x3400080}, +{0x3400000, 0x81398437, 0x7fffff, 0x81398437, 0x3400080}, +{0x3400000, 0x81398437, 0x800000, 0x80f3086e, 0x3400000}, +{0x3400000, 0x81398437, 0x800002, 0x80f3086c, 0x3400000}, +{0x3400000, 0x81398437, 0x1398437, 0x0, 0x3400000}, +{0x3400000, 0x81398437, 0xba98d27, 0xba98d22, 0x3400010}, +{0x3400000, 0x81398437, 0xba98d7a, 0xba98d75, 0x3400010}, +{0x3400000, 0x81398437, 0x751f853a, 0x751f853a, 0x3400010}, +{0x3400000, 0x81398437, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x81398437, 0x7f7fffff, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x81398437, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x81398437, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x81398437, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x81398437, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x81398437, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x81398437, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x81398437, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x81398437, 0x80000000, 0x81398437, 0x3400000}, +{0x3400000, 0x81398437, 0x80000001, 0x81398437, 0x3400080}, +{0x3400000, 0x81398437, 0x80000076, 0x81398437, 0x3400080}, +{0x3400000, 0x81398437, 0x80002b94, 0x81398437, 0x3400080}, +{0x3400000, 0x81398437, 0x80636d24, 0x81398437, 0x3400080}, +{0x3400000, 0x81398437, 0x807fffff, 0x81398437, 0x3400080}, +{0x3400000, 0x81398437, 0x80800000, 0x81798437, 0x3400000}, +{0x3400000, 0x81398437, 0x80800002, 0x81798438, 0x3400000}, +{0x3400000, 0x81398437, 0x81398437, 0x81b98437, 0x3400000}, +{0x3400000, 0x81398437, 0x8ba98d27, 0x8ba98d2c, 0x3400010}, +{0x3400000, 0x81398437, 0x8ba98d7a, 0x8ba98d7f, 0x3400010}, +{0x3400000, 0x81398437, 0xf51f853a, 0xf51f853a, 0x3400010}, +{0x3400000, 0x81398437, 0xff7ffff0, 0xff7ffff0, 0x3400010}, +{0x3400000, 0x81398437, 0xff7fffff, 0xff7fffff, 0x3400010}, +{0x3400000, 0x81398437, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x81398437, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x81398437, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x81398437, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x81398437, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x81398437, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x81398437, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x81398437, 0x4f3495cb, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x81398437, 0xe73a5134, 0xe73a5134, 0x3400010}, +{0x3400000, 0x81398437, 0x7c994e9e, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x81398437, 0x6164bd6c, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x81398437, 0x9503366, 0x95032ad, 0x3400010}, +{0x3400000, 0x81398437, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0x81398437, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0x81398437, 0x77f31e2f, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x81398437, 0xaab4d7d8, 0xaab4d7d8, 0x3400010}, +{0x3400000, 0x81398437, 0x966320b, 0x9663152, 0x3400010}, +{0x3400000, 0x81398437, 0xb26bddee, 0xb26bddee, 0x3400010}, +{0x3400000, 0x81398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010}, +{0x3400000, 0x81398437, 0x317285d3, 0x317285d3, 0x3400010}, +{0x3400000, 0x81398437, 0x3c9623b1, 0x3c9623b1, 0x3400010}, +{0x3400000, 0x81398437, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x81398437, 0x7b906a6c, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x0, 0x8ba98d27, 0x3400000}, +{0x3400000, 0x8ba98d27, 0x1, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x8ba98d27, 0x76, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x8ba98d27, 0x2b94, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x8ba98d27, 0x636d24, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x8ba98d27, 0x7fffff, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x8ba98d27, 0x800000, 0x8ba98d25, 0x3400000}, +{0x3400000, 0x8ba98d27, 0x800002, 0x8ba98d24, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x1398437, 0x8ba98d21, 0x3400010}, +{0x3400000, 0x8ba98d27, 0xba98d27, 0x0, 0x3400000}, +{0x3400000, 0x8ba98d27, 0xba98d7a, 0x3260000, 0x3400000}, +{0x3400000, 0x8ba98d27, 0x751f853a, 0x751f853a, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x7f7fffff, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x8ba98d27, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x8ba98d27, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x8ba98d27, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x8ba98d27, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x8ba98d27, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x8ba98d27, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x8ba98d27, 0x80000000, 0x8ba98d27, 0x3400000}, +{0x3400000, 0x8ba98d27, 0x80000001, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x8ba98d27, 0x80000076, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x8ba98d27, 0x80002b94, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x8ba98d27, 0x80636d24, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x8ba98d27, 0x807fffff, 0x8ba98d27, 0x3400080}, +{0x3400000, 0x8ba98d27, 0x80800000, 0x8ba98d29, 0x3400000}, +{0x3400000, 0x8ba98d27, 0x80800002, 0x8ba98d29, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x81398437, 0x8ba98d2c, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x8ba98d27, 0x8c298d27, 0x3400000}, +{0x3400000, 0x8ba98d27, 0x8ba98d7a, 0x8c298d50, 0x3400010}, +{0x3400000, 0x8ba98d27, 0xf51f853a, 0xf51f853a, 0x3400010}, +{0x3400000, 0x8ba98d27, 0xff7ffff0, 0xff7ffff0, 0x3400010}, +{0x3400000, 0x8ba98d27, 0xff7fffff, 0xff7fffff, 0x3400010}, +{0x3400000, 0x8ba98d27, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x8ba98d27, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x8ba98d27, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x8ba98d27, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x8ba98d27, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x8ba98d27, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x8ba98d27, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x8ba98d27, 0x4f3495cb, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x8ba98d27, 0xe73a5134, 0xe73a5134, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x7c994e9e, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x6164bd6c, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x9503366, 0x8ba30b8b, 0x3400010}, +{0x3400000, 0x8ba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0x8ba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x77f31e2f, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x8ba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x966320b, 0x8ba25b96, 0x3400010}, +{0x3400000, 0x8ba98d27, 0xb26bddee, 0xb26bddee, 0x3400010}, +{0x3400000, 0x8ba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x317285d3, 0x317285d3, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x3c9623b1, 0x3c9623b1, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x8ba98d27, 0x7b906a6c, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x0, 0x8ba98d7a, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0x1, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x8ba98d7a, 0x76, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x8ba98d7a, 0x2b94, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x8ba98d7a, 0x636d24, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x8ba98d7a, 0x7fffff, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x8ba98d7a, 0x800000, 0x8ba98d78, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0x800002, 0x8ba98d77, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x1398437, 0x8ba98d74, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0xba98d27, 0x83260000, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0xba98d7a, 0x0, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0x751f853a, 0x751f853a, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x8ba98d7a, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x8ba98d7a, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x8ba98d7a, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0x80000000, 0x8ba98d7a, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0x80000001, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x8ba98d7a, 0x80000076, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x8ba98d7a, 0x80002b94, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x8ba98d7a, 0x80636d24, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x8ba98d7a, 0x807fffff, 0x8ba98d7a, 0x3400080}, +{0x3400000, 0x8ba98d7a, 0x80800000, 0x8ba98d7c, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0x80800002, 0x8ba98d7c, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x81398437, 0x8ba98d7f, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x8ba98d27, 0x8c298d50, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x8ba98d7a, 0x8c298d7a, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0xf51f853a, 0xf51f853a, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0xff7fffff, 0xff7fffff, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x8ba98d7a, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x8ba98d7a, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x8ba98d7a, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x8ba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0xe73a5134, 0xe73a5134, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x9503366, 0x8ba30bde, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x966320b, 0x8ba25be9, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0xb26bddee, 0xb26bddee, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x317285d3, 0x317285d3, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x8ba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3400010}, +{0x3400000, 0xf51f853a, 0x0, 0xf51f853a, 0x3400000}, +{0x3400000, 0xf51f853a, 0x1, 0xf51f853a, 0x3400080}, +{0x3400000, 0xf51f853a, 0x76, 0xf51f853a, 0x3400080}, +{0x3400000, 0xf51f853a, 0x2b94, 0xf51f853a, 0x3400080}, +{0x3400000, 0xf51f853a, 0x636d24, 0xf51f853a, 0x3400080}, +{0x3400000, 0xf51f853a, 0x7fffff, 0xf51f853a, 0x3400080}, +{0x3400000, 0xf51f853a, 0x800000, 0xf51f8539, 0x3400010}, +{0x3400000, 0xf51f853a, 0x800002, 0xf51f8539, 0x3400010}, +{0x3400000, 0xf51f853a, 0x1398437, 0xf51f8539, 0x3400010}, +{0x3400000, 0xf51f853a, 0xba98d27, 0xf51f8539, 0x3400010}, +{0x3400000, 0xf51f853a, 0xba98d7a, 0xf51f8539, 0x3400010}, +{0x3400000, 0xf51f853a, 0x751f853a, 0x0, 0x3400000}, +{0x3400000, 0xf51f853a, 0x7f7ffff0, 0x7f7fffe7, 0x3400010}, +{0x3400000, 0xf51f853a, 0x7f7fffff, 0x7f7ffff6, 0x3400010}, +{0x3400000, 0xf51f853a, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0xf51f853a, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xf51f853a, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xf51f853a, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xf51f853a, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xf51f853a, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xf51f853a, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xf51f853a, 0x80000000, 0xf51f853a, 0x3400000}, +{0x3400000, 0xf51f853a, 0x80000001, 0xf51f853a, 0x3400080}, +{0x3400000, 0xf51f853a, 0x80000076, 0xf51f853a, 0x3400080}, +{0x3400000, 0xf51f853a, 0x80002b94, 0xf51f853a, 0x3400080}, +{0x3400000, 0xf51f853a, 0x80636d24, 0xf51f853a, 0x3400080}, +{0x3400000, 0xf51f853a, 0x807fffff, 0xf51f853a, 0x3400080}, +{0x3400000, 0xf51f853a, 0x80800000, 0xf51f853a, 0x3400010}, +{0x3400000, 0xf51f853a, 0x80800002, 0xf51f853a, 0x3400010}, +{0x3400000, 0xf51f853a, 0x81398437, 0xf51f853a, 0x3400010}, +{0x3400000, 0xf51f853a, 0x8ba98d27, 0xf51f853a, 0x3400010}, +{0x3400000, 0xf51f853a, 0x8ba98d7a, 0xf51f853a, 0x3400010}, +{0x3400000, 0xf51f853a, 0xf51f853a, 0xf59f853a, 0x3400000}, +{0x3400000, 0xf51f853a, 0xff7ffff0, 0xff7ffff9, 0x3400010}, +{0x3400000, 0xf51f853a, 0xff7fffff, 0xff7fffff, 0x3400014}, +{0x3400000, 0xf51f853a, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0xf51f853a, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xf51f853a, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xf51f853a, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xf51f853a, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xf51f853a, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xf51f853a, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xf51f853a, 0x4f3495cb, 0xf51f8539, 0x3400010}, +{0x3400000, 0xf51f853a, 0xe73a5134, 0xf51f853a, 0x3400010}, +{0x3400000, 0xf51f853a, 0x7c994e9e, 0x7c994d5f, 0x3400010}, +{0x3400000, 0xf51f853a, 0x6164bd6c, 0xf51f8539, 0x3400010}, +{0x3400000, 0xf51f853a, 0x9503366, 0xf51f8539, 0x3400010}, +{0x3400000, 0xf51f853a, 0xbf5a97c9, 0xf51f853a, 0x3400010}, +{0x3400000, 0xf51f853a, 0xe6ff1a14, 0xf51f853a, 0x3400010}, +{0x3400000, 0xf51f853a, 0x77f31e2f, 0x77ee2206, 0x3400010}, +{0x3400000, 0xf51f853a, 0xaab4d7d8, 0xf51f853a, 0x3400010}, +{0x3400000, 0xf51f853a, 0x966320b, 0xf51f8539, 0x3400010}, +{0x3400000, 0xf51f853a, 0xb26bddee, 0xf51f853a, 0x3400010}, +{0x3400000, 0xf51f853a, 0xb5c8e5d3, 0xf51f853a, 0x3400010}, +{0x3400000, 0xf51f853a, 0x317285d3, 0xf51f8539, 0x3400010}, +{0x3400000, 0xf51f853a, 0x3c9623b1, 0xf51f8539, 0x3400010}, +{0x3400000, 0xf51f853a, 0x51fd2c7c, 0xf51f8539, 0x3400010}, +{0x3400000, 0xf51f853a, 0x7b906a6c, 0x7b906570, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x0, 0xff7ffff0, 0x3400000}, +{0x3400000, 0xff7ffff0, 0x1, 0xff7ffff0, 0x3400080}, +{0x3400000, 0xff7ffff0, 0x76, 0xff7ffff0, 0x3400080}, +{0x3400000, 0xff7ffff0, 0x2b94, 0xff7ffff0, 0x3400080}, +{0x3400000, 0xff7ffff0, 0x636d24, 0xff7ffff0, 0x3400080}, +{0x3400000, 0xff7ffff0, 0x7fffff, 0xff7ffff0, 0x3400080}, +{0x3400000, 0xff7ffff0, 0x800000, 0xff7fffef, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x800002, 0xff7fffef, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x1398437, 0xff7fffef, 0x3400010}, +{0x3400000, 0xff7ffff0, 0xba98d27, 0xff7fffef, 0x3400010}, +{0x3400000, 0xff7ffff0, 0xba98d7a, 0xff7fffef, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x751f853a, 0xff7fffe6, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x7f7ffff0, 0x0, 0x3400000}, +{0x3400000, 0xff7ffff0, 0x7f7fffff, 0x75700000, 0x3400000}, +{0x3400000, 0xff7ffff0, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0xff7ffff0, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff7ffff0, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff7ffff0, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff7ffff0, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff7ffff0, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff7ffff0, 0x80000000, 0xff7ffff0, 0x3400000}, +{0x3400000, 0xff7ffff0, 0x80000001, 0xff7ffff0, 0x3400080}, +{0x3400000, 0xff7ffff0, 0x80000076, 0xff7ffff0, 0x3400080}, +{0x3400000, 0xff7ffff0, 0x80002b94, 0xff7ffff0, 0x3400080}, +{0x3400000, 0xff7ffff0, 0x80636d24, 0xff7ffff0, 0x3400080}, +{0x3400000, 0xff7ffff0, 0x807fffff, 0xff7ffff0, 0x3400080}, +{0x3400000, 0xff7ffff0, 0x80800000, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x80800002, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x81398437, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x8ba98d27, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x8ba98d7a, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xff7ffff0, 0xf51f853a, 0xff7ffff9, 0x3400010}, +{0x3400000, 0xff7ffff0, 0xff7ffff0, 0xff7fffff, 0x3400014}, +{0x3400000, 0xff7ffff0, 0xff7fffff, 0xff7fffff, 0x3400014}, +{0x3400000, 0xff7ffff0, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0xff7ffff0, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff7ffff0, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff7ffff0, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff7ffff0, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff7ffff0, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff7ffff0, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff7ffff0, 0x4f3495cb, 0xff7fffef, 0x3400010}, +{0x3400000, 0xff7ffff0, 0xe73a5134, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x7c994e9e, 0xff7b357b, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x6164bd6c, 0xff7fffef, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x9503366, 0xff7fffef, 0x3400010}, +{0x3400000, 0xff7ffff0, 0xbf5a97c9, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xff7ffff0, 0xe6ff1a14, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x77f31e2f, 0xff7ffe09, 0x3400010}, +{0x3400000, 0xff7ffff0, 0xaab4d7d8, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x966320b, 0xff7fffef, 0x3400010}, +{0x3400000, 0xff7ffff0, 0xb26bddee, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xff7ffff0, 0xb5c8e5d3, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x317285d3, 0xff7fffef, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x3c9623b1, 0xff7fffef, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x51fd2c7c, 0xff7fffef, 0x3400010}, +{0x3400000, 0xff7ffff0, 0x7b906a6c, 0xff7edf1b, 0x3400010}, +{0x3400000, 0xff7fffff, 0x0, 0xff7fffff, 0x3400000}, +{0x3400000, 0xff7fffff, 0x1, 0xff7fffff, 0x3400080}, +{0x3400000, 0xff7fffff, 0x76, 0xff7fffff, 0x3400080}, +{0x3400000, 0xff7fffff, 0x2b94, 0xff7fffff, 0x3400080}, +{0x3400000, 0xff7fffff, 0x636d24, 0xff7fffff, 0x3400080}, +{0x3400000, 0xff7fffff, 0x7fffff, 0xff7fffff, 0x3400080}, +{0x3400000, 0xff7fffff, 0x800000, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xff7fffff, 0x800002, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xff7fffff, 0x1398437, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xff7fffff, 0xba98d27, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xff7fffff, 0xba98d7a, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xff7fffff, 0x751f853a, 0xff7ffff5, 0x3400010}, +{0x3400000, 0xff7fffff, 0x7f7ffff0, 0xf5700000, 0x3400000}, +{0x3400000, 0xff7fffff, 0x7f7fffff, 0x0, 0x3400000}, +{0x3400000, 0xff7fffff, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0xff7fffff, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff7fffff, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff7fffff, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff7fffff, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff7fffff, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff7fffff, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff7fffff, 0x80000000, 0xff7fffff, 0x3400000}, +{0x3400000, 0xff7fffff, 0x80000001, 0xff7fffff, 0x3400080}, +{0x3400000, 0xff7fffff, 0x80000076, 0xff7fffff, 0x3400080}, +{0x3400000, 0xff7fffff, 0x80002b94, 0xff7fffff, 0x3400080}, +{0x3400000, 0xff7fffff, 0x80636d24, 0xff7fffff, 0x3400080}, +{0x3400000, 0xff7fffff, 0x807fffff, 0xff7fffff, 0x3400080}, +{0x3400000, 0xff7fffff, 0x80800000, 0xff7fffff, 0x3400010}, +{0x3400000, 0xff7fffff, 0x80800002, 0xff7fffff, 0x3400010}, +{0x3400000, 0xff7fffff, 0x81398437, 0xff7fffff, 0x3400010}, +{0x3400000, 0xff7fffff, 0x8ba98d27, 0xff7fffff, 0x3400010}, +{0x3400000, 0xff7fffff, 0x8ba98d7a, 0xff7fffff, 0x3400010}, +{0x3400000, 0xff7fffff, 0xf51f853a, 0xff7fffff, 0x3400014}, +{0x3400000, 0xff7fffff, 0xff7ffff0, 0xff7fffff, 0x3400014}, +{0x3400000, 0xff7fffff, 0xff7fffff, 0xff7fffff, 0x3400014}, +{0x3400000, 0xff7fffff, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0xff7fffff, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff7fffff, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff7fffff, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff7fffff, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff7fffff, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff7fffff, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff7fffff, 0x4f3495cb, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xff7fffff, 0xe73a5134, 0xff7fffff, 0x3400010}, +{0x3400000, 0xff7fffff, 0x7c994e9e, 0xff7b358a, 0x3400010}, +{0x3400000, 0xff7fffff, 0x6164bd6c, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xff7fffff, 0x9503366, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xff7fffff, 0xbf5a97c9, 0xff7fffff, 0x3400010}, +{0x3400000, 0xff7fffff, 0xe6ff1a14, 0xff7fffff, 0x3400010}, +{0x3400000, 0xff7fffff, 0x77f31e2f, 0xff7ffe18, 0x3400010}, +{0x3400000, 0xff7fffff, 0xaab4d7d8, 0xff7fffff, 0x3400010}, +{0x3400000, 0xff7fffff, 0x966320b, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xff7fffff, 0xb26bddee, 0xff7fffff, 0x3400010}, +{0x3400000, 0xff7fffff, 0xb5c8e5d3, 0xff7fffff, 0x3400010}, +{0x3400000, 0xff7fffff, 0x317285d3, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xff7fffff, 0x3c9623b1, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xff7fffff, 0x51fd2c7c, 0xff7ffffe, 0x3400010}, +{0x3400000, 0xff7fffff, 0x7b906a6c, 0xff7edf2a, 0x3400010}, +{0x3400000, 0xff800000, 0x0, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x1, 0xff800000, 0x3400080}, +{0x3400000, 0xff800000, 0x76, 0xff800000, 0x3400080}, +{0x3400000, 0xff800000, 0x2b94, 0xff800000, 0x3400080}, +{0x3400000, 0xff800000, 0x636d24, 0xff800000, 0x3400080}, +{0x3400000, 0xff800000, 0x7fffff, 0xff800000, 0x3400080}, +{0x3400000, 0xff800000, 0x800000, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x800002, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x1398437, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xba98d27, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xba98d7a, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x751f853a, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x7f7ffff0, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x7f7fffff, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x7f800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800000, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800000, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800000, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800000, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff800000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff800000, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff800000, 0x80000000, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x80000001, 0xff800000, 0x3400080}, +{0x3400000, 0xff800000, 0x80000076, 0xff800000, 0x3400080}, +{0x3400000, 0xff800000, 0x80002b94, 0xff800000, 0x3400080}, +{0x3400000, 0xff800000, 0x80636d24, 0xff800000, 0x3400080}, +{0x3400000, 0xff800000, 0x807fffff, 0xff800000, 0x3400080}, +{0x3400000, 0xff800000, 0x80800000, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x80800002, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x81398437, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x8ba98d27, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x8ba98d7a, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xf51f853a, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xff7ffff0, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xff7fffff, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800000, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800000, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800000, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff800000, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff800000, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xff800000, 0x4f3495cb, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xe73a5134, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x7c994e9e, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x6164bd6c, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x9503366, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xbf5a97c9, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xe6ff1a14, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x77f31e2f, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xaab4d7d8, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x966320b, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xb26bddee, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0xb5c8e5d3, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x317285d3, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x3c9623b1, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x51fd2c7c, 0xff800000, 0x3400000}, +{0x3400000, 0xff800000, 0x7b906a6c, 0xff800000, 0x3400000}, +{0x3400000, 0xff800001, 0x0, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x1, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff800001, 0x76, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff800001, 0x2b94, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff800001, 0x636d24, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff800001, 0x7fffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff800001, 0x800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x800002, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x1398437, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xba98d27, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xba98d7a, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x751f853a, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x7f7ffff0, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x7f7fffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x7f800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x7fc00000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x7fd9ba98, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x7fffffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x80000000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x80000001, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff800001, 0x80000076, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff800001, 0x80002b94, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff800001, 0x80636d24, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff800001, 0x807fffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff800001, 0x80800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x80800002, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x81398437, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x8ba98d27, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x8ba98d7a, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xf51f853a, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xff7ffff0, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xff7fffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xff800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xffc00000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xffd9ba98, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xffffffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x4f3495cb, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xe73a5134, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x7c994e9e, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x6164bd6c, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x9503366, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xbf5a97c9, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xe6ff1a14, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x77f31e2f, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xaab4d7d8, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x966320b, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xb26bddee, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0xb5c8e5d3, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x317285d3, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x3c9623b1, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x51fd2c7c, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff800001, 0x7b906a6c, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x0, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x1, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff984a37, 0x76, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff984a37, 0x2b94, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff984a37, 0x636d24, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff984a37, 0x7fffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff984a37, 0x800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x800002, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x1398437, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xba98d27, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xba98d7a, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x751f853a, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x7f7ffff0, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x7f7fffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x7f800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x7fc00000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x7fd9ba98, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x7fffffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x80000000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x80000001, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff984a37, 0x80000076, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff984a37, 0x80002b94, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff984a37, 0x80636d24, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff984a37, 0x807fffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0xff984a37, 0x80800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x80800002, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x81398437, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x8ba98d27, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x8ba98d7a, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xf51f853a, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xff7ffff0, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xff7fffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xff800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xffc00000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xffd9ba98, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xffffffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x4f3495cb, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xe73a5134, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x7c994e9e, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x6164bd6c, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x9503366, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xbf5a97c9, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xe6ff1a14, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x77f31e2f, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xaab4d7d8, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x966320b, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xb26bddee, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0xb5c8e5d3, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x317285d3, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x3c9623b1, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x51fd2c7c, 0x7fc00000, 0x3400001}, +{0x3400000, 0xff984a37, 0x7b906a6c, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x0, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x1, 0x7fc00000, 0x3400081}, +{0x3400000, 0xffbfffff, 0x76, 0x7fc00000, 0x3400081}, +{0x3400000, 0xffbfffff, 0x2b94, 0x7fc00000, 0x3400081}, +{0x3400000, 0xffbfffff, 0x636d24, 0x7fc00000, 0x3400081}, +{0x3400000, 0xffbfffff, 0x7fffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0xffbfffff, 0x800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x800002, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x1398437, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xba98d27, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xba98d7a, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x751f853a, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x7f7ffff0, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x7f7fffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x7f800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x7fc00000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x7fd9ba98, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x7fffffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x80000000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x80000001, 0x7fc00000, 0x3400081}, +{0x3400000, 0xffbfffff, 0x80000076, 0x7fc00000, 0x3400081}, +{0x3400000, 0xffbfffff, 0x80002b94, 0x7fc00000, 0x3400081}, +{0x3400000, 0xffbfffff, 0x80636d24, 0x7fc00000, 0x3400081}, +{0x3400000, 0xffbfffff, 0x807fffff, 0x7fc00000, 0x3400081}, +{0x3400000, 0xffbfffff, 0x80800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x80800002, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x81398437, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x8ba98d27, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x8ba98d7a, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xf51f853a, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xff7ffff0, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xff7fffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xff800000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xffc00000, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xffd9ba98, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xffffffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x4f3495cb, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xe73a5134, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x7c994e9e, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x6164bd6c, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x9503366, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xbf5a97c9, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xe6ff1a14, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x77f31e2f, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xaab4d7d8, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x966320b, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xb26bddee, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x317285d3, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x3c9623b1, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x51fd2c7c, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffbfffff, 0x7b906a6c, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffc00000, 0x0, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x1, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffc00000, 0x76, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffc00000, 0x2b94, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffc00000, 0x636d24, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffc00000, 0x7fffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffc00000, 0x800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x800002, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x1398437, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xba98d27, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xba98d7a, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x751f853a, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x7f7ffff0, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x7f7fffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x7f800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffc00000, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffc00000, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffc00000, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x80000000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x80000001, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffc00000, 0x80000076, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffc00000, 0x80002b94, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffc00000, 0x80636d24, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffc00000, 0x807fffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffc00000, 0x80800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x80800002, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x81398437, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x8ba98d27, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x8ba98d7a, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xf51f853a, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xff7ffff0, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xff7fffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xff800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffc00000, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffc00000, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffc00000, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x4f3495cb, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xe73a5134, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x7c994e9e, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x6164bd6c, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x9503366, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xbf5a97c9, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xe6ff1a14, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x77f31e2f, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xaab4d7d8, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x966320b, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xb26bddee, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0xb5c8e5d3, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x317285d3, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x3c9623b1, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x51fd2c7c, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffc00000, 0x7b906a6c, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x0, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x1, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffd9ba98, 0x76, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffd9ba98, 0x2b94, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffd9ba98, 0x636d24, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffd9ba98, 0x7fffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffd9ba98, 0x800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x800002, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x1398437, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xba98d27, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xba98d7a, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x751f853a, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x7f7fffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x7f800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffd9ba98, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffd9ba98, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffd9ba98, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x80000000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x80000001, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffd9ba98, 0x80000076, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffd9ba98, 0x80002b94, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffd9ba98, 0x80636d24, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffd9ba98, 0x807fffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffd9ba98, 0x80800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x80800002, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x81398437, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x8ba98d27, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xf51f853a, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xff7ffff0, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xff7fffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xff800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffd9ba98, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffd9ba98, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffd9ba98, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x4f3495cb, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xe73a5134, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x7c994e9e, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x6164bd6c, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x9503366, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x77f31e2f, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x966320b, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xb26bddee, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x317285d3, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x3c9623b1, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffd9ba98, 0x7b906a6c, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x0, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x1, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffffffff, 0x76, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffffffff, 0x2b94, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffffffff, 0x636d24, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffffffff, 0x7fffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffffffff, 0x800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x800002, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x1398437, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xba98d27, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xba98d7a, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x751f853a, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x7f7ffff0, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x7f7fffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x7f800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffffffff, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffffffff, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffffffff, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x80000000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x80000001, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffffffff, 0x80000076, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffffffff, 0x80002b94, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffffffff, 0x80636d24, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffffffff, 0x807fffff, 0x7fc00000, 0x3400080}, +{0x3400000, 0xffffffff, 0x80800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x80800002, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x81398437, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x8ba98d27, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x8ba98d7a, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xf51f853a, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xff7ffff0, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xff7fffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xff800000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffffffff, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffffffff, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xffffffff, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x4f3495cb, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xe73a5134, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x7c994e9e, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x6164bd6c, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x9503366, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xbf5a97c9, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xe6ff1a14, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x77f31e2f, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xaab4d7d8, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x966320b, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xb26bddee, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0xb5c8e5d3, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x317285d3, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x3c9623b1, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x51fd2c7c, 0x7fc00000, 0x3400000}, +{0x3400000, 0xffffffff, 0x7b906a6c, 0x7fc00000, 0x3400000}, +{0x3400000, 0x4f3495cb, 0x0, 0x4f3495cb, 0x3400000}, +{0x3400000, 0x4f3495cb, 0x1, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x4f3495cb, 0x76, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x4f3495cb, 0x2b94, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x4f3495cb, 0x636d24, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x4f3495cb, 0x7fffff, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x4f3495cb, 0x800000, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x800002, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x1398437, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x4f3495cb, 0xba98d27, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x4f3495cb, 0xba98d7a, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x751f853a, 0x751f853b, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x4f3495cb, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x4f3495cb, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x4f3495cb, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x4f3495cb, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x4f3495cb, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x4f3495cb, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x4f3495cb, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x4f3495cb, 0x80000000, 0x4f3495cb, 0x3400000}, +{0x3400000, 0x4f3495cb, 0x80000001, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x4f3495cb, 0x80000076, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x4f3495cb, 0x80002b94, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x4f3495cb, 0x80636d24, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x4f3495cb, 0x807fffff, 0x4f3495cb, 0x3400080}, +{0x3400000, 0x4f3495cb, 0x80800000, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x80800002, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x81398437, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x8ba98d27, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x8ba98d7a, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x4f3495cb, 0xf51f853a, 0xf51f8539, 0x3400010}, +{0x3400000, 0x4f3495cb, 0xff7ffff0, 0xff7fffef, 0x3400010}, +{0x3400000, 0x4f3495cb, 0xff7fffff, 0xff7ffffe, 0x3400010}, +{0x3400000, 0x4f3495cb, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x4f3495cb, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x4f3495cb, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x4f3495cb, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x4f3495cb, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x4f3495cb, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x4f3495cb, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x4f3495cb, 0x4f3495cb, 0x4fb495cb, 0x3400000}, +{0x3400000, 0x4f3495cb, 0xe73a5134, 0xe73a5133, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x7c994e9e, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x6164bd6c, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x9503366, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x4f3495cb, 0xbf5a97c9, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x4f3495cb, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x77f31e2f, 0x77f31e30, 0x3400010}, +{0x3400000, 0x4f3495cb, 0xaab4d7d8, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x966320b, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x4f3495cb, 0xb26bddee, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x4f3495cb, 0xb5c8e5d3, 0x4f3495cb, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x317285d3, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x3c9623b1, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x51fd2c7c, 0x52016896, 0x3400010}, +{0x3400000, 0x4f3495cb, 0x7b906a6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0xe73a5134, 0x0, 0xe73a5134, 0x3400000}, +{0x3400000, 0xe73a5134, 0x1, 0xe73a5134, 0x3400080}, +{0x3400000, 0xe73a5134, 0x76, 0xe73a5134, 0x3400080}, +{0x3400000, 0xe73a5134, 0x2b94, 0xe73a5134, 0x3400080}, +{0x3400000, 0xe73a5134, 0x636d24, 0xe73a5134, 0x3400080}, +{0x3400000, 0xe73a5134, 0x7fffff, 0xe73a5134, 0x3400080}, +{0x3400000, 0xe73a5134, 0x800000, 0xe73a5133, 0x3400010}, +{0x3400000, 0xe73a5134, 0x800002, 0xe73a5133, 0x3400010}, +{0x3400000, 0xe73a5134, 0x1398437, 0xe73a5133, 0x3400010}, +{0x3400000, 0xe73a5134, 0xba98d27, 0xe73a5133, 0x3400010}, +{0x3400000, 0xe73a5134, 0xba98d7a, 0xe73a5133, 0x3400010}, +{0x3400000, 0xe73a5134, 0x751f853a, 0x751f853a, 0x3400010}, +{0x3400000, 0xe73a5134, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0xe73a5134, 0x7f7fffff, 0x7f7fffff, 0x3400010}, +{0x3400000, 0xe73a5134, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0xe73a5134, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xe73a5134, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xe73a5134, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xe73a5134, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xe73a5134, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xe73a5134, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xe73a5134, 0x80000000, 0xe73a5134, 0x3400000}, +{0x3400000, 0xe73a5134, 0x80000001, 0xe73a5134, 0x3400080}, +{0x3400000, 0xe73a5134, 0x80000076, 0xe73a5134, 0x3400080}, +{0x3400000, 0xe73a5134, 0x80002b94, 0xe73a5134, 0x3400080}, +{0x3400000, 0xe73a5134, 0x80636d24, 0xe73a5134, 0x3400080}, +{0x3400000, 0xe73a5134, 0x807fffff, 0xe73a5134, 0x3400080}, +{0x3400000, 0xe73a5134, 0x80800000, 0xe73a5134, 0x3400010}, +{0x3400000, 0xe73a5134, 0x80800002, 0xe73a5134, 0x3400010}, +{0x3400000, 0xe73a5134, 0x81398437, 0xe73a5134, 0x3400010}, +{0x3400000, 0xe73a5134, 0x8ba98d27, 0xe73a5134, 0x3400010}, +{0x3400000, 0xe73a5134, 0x8ba98d7a, 0xe73a5134, 0x3400010}, +{0x3400000, 0xe73a5134, 0xf51f853a, 0xf51f853a, 0x3400010}, +{0x3400000, 0xe73a5134, 0xff7ffff0, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xe73a5134, 0xff7fffff, 0xff7fffff, 0x3400010}, +{0x3400000, 0xe73a5134, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0xe73a5134, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xe73a5134, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xe73a5134, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xe73a5134, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xe73a5134, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xe73a5134, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xe73a5134, 0x4f3495cb, 0xe73a5133, 0x3400010}, +{0x3400000, 0xe73a5134, 0xe73a5134, 0xe7ba5134, 0x3400000}, +{0x3400000, 0xe73a5134, 0x7c994e9e, 0x7c994e9e, 0x3400010}, +{0x3400000, 0xe73a5134, 0x6164bd6c, 0xe73a42e8, 0x3400010}, +{0x3400000, 0xe73a5134, 0x9503366, 0xe73a5133, 0x3400010}, +{0x3400000, 0xe73a5134, 0xbf5a97c9, 0xe73a5134, 0x3400010}, +{0x3400000, 0xe73a5134, 0xe6ff1a14, 0xe79cef1f, 0x3400000}, +{0x3400000, 0xe73a5134, 0x77f31e2f, 0x77f31e2f, 0x3400010}, +{0x3400000, 0xe73a5134, 0xaab4d7d8, 0xe73a5134, 0x3400010}, +{0x3400000, 0xe73a5134, 0x966320b, 0xe73a5133, 0x3400010}, +{0x3400000, 0xe73a5134, 0xb26bddee, 0xe73a5134, 0x3400010}, +{0x3400000, 0xe73a5134, 0xb5c8e5d3, 0xe73a5134, 0x3400010}, +{0x3400000, 0xe73a5134, 0x317285d3, 0xe73a5133, 0x3400010}, +{0x3400000, 0xe73a5134, 0x3c9623b1, 0xe73a5133, 0x3400010}, +{0x3400000, 0xe73a5134, 0x51fd2c7c, 0xe73a5133, 0x3400010}, +{0x3400000, 0xe73a5134, 0x7b906a6c, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x0, 0x7c994e9e, 0x3400000}, +{0x3400000, 0x7c994e9e, 0x1, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x7c994e9e, 0x76, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x7c994e9e, 0x2b94, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x7c994e9e, 0x636d24, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x7c994e9e, 0x7fffff, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x7c994e9e, 0x800000, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x800002, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x1398437, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0xba98d27, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0xba98d7a, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x751f853a, 0x7c994fde, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x7f7ffff0, 0x7f800000, 0x3400014}, +{0x3400000, 0x7c994e9e, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x7c994e9e, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x7c994e9e, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7c994e9e, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7c994e9e, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7c994e9e, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7c994e9e, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7c994e9e, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7c994e9e, 0x80000000, 0x7c994e9e, 0x3400000}, +{0x3400000, 0x7c994e9e, 0x80000001, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x7c994e9e, 0x80000076, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x7c994e9e, 0x80002b94, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x7c994e9e, 0x80636d24, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x7c994e9e, 0x807fffff, 0x7c994e9e, 0x3400080}, +{0x3400000, 0x7c994e9e, 0x80800000, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x80800002, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x81398437, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x8ba98d27, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x8ba98d7a, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x7c994e9e, 0xf51f853a, 0x7c994d5f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0xff7ffff0, 0xff7b357b, 0x3400010}, +{0x3400000, 0x7c994e9e, 0xff7fffff, 0xff7b358a, 0x3400010}, +{0x3400000, 0x7c994e9e, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x7c994e9e, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7c994e9e, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7c994e9e, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7c994e9e, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7c994e9e, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7c994e9e, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7c994e9e, 0x4f3495cb, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0xe73a5134, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x7c994e9e, 0x7d194e9e, 0x3400000}, +{0x3400000, 0x7c994e9e, 0x6164bd6c, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x9503366, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0xbf5a97c9, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x7c994e9e, 0xe6ff1a14, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x77f31e2f, 0x7c998b66, 0x3400010}, +{0x3400000, 0x7c994e9e, 0xaab4d7d8, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x966320b, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0xb26bddee, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x7c994e9e, 0xb5c8e5d3, 0x7c994e9e, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x317285d3, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x3c9623b1, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x51fd2c7c, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x7c994e9e, 0x7b906a6c, 0x7cbd6939, 0x3400000}, +{0x3400000, 0x6164bd6c, 0x0, 0x6164bd6c, 0x3400000}, +{0x3400000, 0x6164bd6c, 0x1, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x6164bd6c, 0x76, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x6164bd6c, 0x2b94, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x6164bd6c, 0x636d24, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x6164bd6c, 0x7fffff, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x6164bd6c, 0x800000, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x800002, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x1398437, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x6164bd6c, 0xba98d27, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x6164bd6c, 0xba98d7a, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x751f853a, 0x751f853b, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x6164bd6c, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x6164bd6c, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x6164bd6c, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x6164bd6c, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x6164bd6c, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x6164bd6c, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x6164bd6c, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x6164bd6c, 0x80000000, 0x6164bd6c, 0x3400000}, +{0x3400000, 0x6164bd6c, 0x80000001, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x6164bd6c, 0x80000076, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x6164bd6c, 0x80002b94, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x6164bd6c, 0x80636d24, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x6164bd6c, 0x807fffff, 0x6164bd6c, 0x3400080}, +{0x3400000, 0x6164bd6c, 0x80800000, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x80800002, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x81398437, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x8ba98d27, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x8ba98d7a, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x6164bd6c, 0xf51f853a, 0xf51f8539, 0x3400010}, +{0x3400000, 0x6164bd6c, 0xff7ffff0, 0xff7fffef, 0x3400010}, +{0x3400000, 0x6164bd6c, 0xff7fffff, 0xff7ffffe, 0x3400010}, +{0x3400000, 0x6164bd6c, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x6164bd6c, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x6164bd6c, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x6164bd6c, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x6164bd6c, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x6164bd6c, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x6164bd6c, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x6164bd6c, 0x4f3495cb, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x6164bd6c, 0xe73a5134, 0xe73a42e8, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x7c994e9e, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x6164bd6c, 0x61e4bd6c, 0x3400000}, +{0x3400000, 0x6164bd6c, 0x9503366, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x6164bd6c, 0xbf5a97c9, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x6164bd6c, 0xe6ff1a14, 0xe6fefd7c, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x77f31e2f, 0x77f31e30, 0x3400010}, +{0x3400000, 0x6164bd6c, 0xaab4d7d8, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x966320b, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x6164bd6c, 0xb26bddee, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x6164bd6c, 0xb5c8e5d3, 0x6164bd6c, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x317285d3, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x3c9623b1, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x51fd2c7c, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x6164bd6c, 0x7b906a6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x9503366, 0x0, 0x9503366, 0x3400000}, +{0x3400000, 0x9503366, 0x1, 0x9503366, 0x3400080}, +{0x3400000, 0x9503366, 0x76, 0x9503366, 0x3400080}, +{0x3400000, 0x9503366, 0x2b94, 0x9503366, 0x3400080}, +{0x3400000, 0x9503366, 0x636d24, 0x9503366, 0x3400080}, +{0x3400000, 0x9503366, 0x7fffff, 0x9503366, 0x3400080}, +{0x3400000, 0x9503366, 0x800000, 0x95033a6, 0x3400000}, +{0x3400000, 0x9503366, 0x800002, 0x95033a7, 0x3400010}, +{0x3400000, 0x9503366, 0x1398437, 0x9503420, 0x3400010}, +{0x3400000, 0x9503366, 0xba98d27, 0xbb00ec3, 0x3400010}, +{0x3400000, 0x9503366, 0xba98d7a, 0xbb00f16, 0x3400010}, +{0x3400000, 0x9503366, 0x751f853a, 0x751f853b, 0x3400010}, +{0x3400000, 0x9503366, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x9503366, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x9503366, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x9503366, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x9503366, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x9503366, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x9503366, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x9503366, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x9503366, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x9503366, 0x80000000, 0x9503366, 0x3400000}, +{0x3400000, 0x9503366, 0x80000001, 0x9503366, 0x3400080}, +{0x3400000, 0x9503366, 0x80000076, 0x9503366, 0x3400080}, +{0x3400000, 0x9503366, 0x80002b94, 0x9503366, 0x3400080}, +{0x3400000, 0x9503366, 0x80636d24, 0x9503366, 0x3400080}, +{0x3400000, 0x9503366, 0x807fffff, 0x9503366, 0x3400080}, +{0x3400000, 0x9503366, 0x80800000, 0x9503326, 0x3400000}, +{0x3400000, 0x9503366, 0x80800002, 0x9503326, 0x3400010}, +{0x3400000, 0x9503366, 0x81398437, 0x95032ad, 0x3400010}, +{0x3400000, 0x9503366, 0x8ba98d27, 0x8ba30b8b, 0x3400010}, +{0x3400000, 0x9503366, 0x8ba98d7a, 0x8ba30bde, 0x3400010}, +{0x3400000, 0x9503366, 0xf51f853a, 0xf51f8539, 0x3400010}, +{0x3400000, 0x9503366, 0xff7ffff0, 0xff7fffef, 0x3400010}, +{0x3400000, 0x9503366, 0xff7fffff, 0xff7ffffe, 0x3400010}, +{0x3400000, 0x9503366, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x9503366, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x9503366, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x9503366, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x9503366, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x9503366, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x9503366, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x9503366, 0x4f3495cb, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x9503366, 0xe73a5134, 0xe73a5133, 0x3400010}, +{0x3400000, 0x9503366, 0x7c994e9e, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x9503366, 0x6164bd6c, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x9503366, 0x9503366, 0x9d03366, 0x3400000}, +{0x3400000, 0x9503366, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0x9503366, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0x9503366, 0x77f31e2f, 0x77f31e30, 0x3400010}, +{0x3400000, 0x9503366, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0x9503366, 0x966320b, 0x9db32b9, 0x3400010}, +{0x3400000, 0x9503366, 0xb26bddee, 0xb26bdded, 0x3400010}, +{0x3400000, 0x9503366, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0x9503366, 0x317285d3, 0x317285d4, 0x3400010}, +{0x3400000, 0x9503366, 0x3c9623b1, 0x3c9623b2, 0x3400010}, +{0x3400000, 0x9503366, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x9503366, 0x7b906a6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x0, 0xbf5a97c9, 0x3400000}, +{0x3400000, 0xbf5a97c9, 0x1, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0xbf5a97c9, 0x76, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0xbf5a97c9, 0x2b94, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0xbf5a97c9, 0x636d24, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0xbf5a97c9, 0x7fffff, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0xbf5a97c9, 0x800000, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x800002, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x1398437, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0xba98d27, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0xba98d7a, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x751f853a, 0x751f853a, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x7f7fffff, 0x7f7fffff, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0xbf5a97c9, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xbf5a97c9, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xbf5a97c9, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xbf5a97c9, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xbf5a97c9, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xbf5a97c9, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xbf5a97c9, 0x80000000, 0xbf5a97c9, 0x3400000}, +{0x3400000, 0xbf5a97c9, 0x80000001, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0xbf5a97c9, 0x80000076, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0xbf5a97c9, 0x80002b94, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0xbf5a97c9, 0x80636d24, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0xbf5a97c9, 0x807fffff, 0xbf5a97c9, 0x3400080}, +{0x3400000, 0xbf5a97c9, 0x80800000, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x80800002, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x81398437, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x8ba98d27, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x8ba98d7a, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0xf51f853a, 0xf51f853a, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0xff7ffff0, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0xff7fffff, 0xff7fffff, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0xbf5a97c9, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xbf5a97c9, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xbf5a97c9, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xbf5a97c9, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xbf5a97c9, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xbf5a97c9, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xbf5a97c9, 0x4f3495cb, 0x4f3495cb, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0xe73a5134, 0xe73a5134, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x7c994e9e, 0x7c994e9e, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x6164bd6c, 0x6164bd6c, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x9503366, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0xbf5a97c9, 0xbfda97c9, 0x3400000}, +{0x3400000, 0xbf5a97c9, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x77f31e2f, 0x77f31e2f, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0xaab4d7d8, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x966320b, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0xb26bddee, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0xb5c8e5d3, 0xbf5a97e2, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x317285d3, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x3c9623b1, 0xbf55e6ab, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0xbf5a97c9, 0x7b906a6c, 0x7b906a6c, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x0, 0xe6ff1a14, 0x3400000}, +{0x3400000, 0xe6ff1a14, 0x1, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0xe6ff1a14, 0x76, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0xe6ff1a14, 0x2b94, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0xe6ff1a14, 0x636d24, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0xe6ff1a14, 0x7fffff, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0xe6ff1a14, 0x800000, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x800002, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x1398437, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0xba98d27, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0xba98d7a, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x751f853a, 0x751f853a, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x7f7fffff, 0x7f7fffff, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0xe6ff1a14, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xe6ff1a14, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xe6ff1a14, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xe6ff1a14, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xe6ff1a14, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xe6ff1a14, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xe6ff1a14, 0x80000000, 0xe6ff1a14, 0x3400000}, +{0x3400000, 0xe6ff1a14, 0x80000001, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0xe6ff1a14, 0x80000076, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0xe6ff1a14, 0x80002b94, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0xe6ff1a14, 0x80636d24, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0xe6ff1a14, 0x807fffff, 0xe6ff1a14, 0x3400080}, +{0x3400000, 0xe6ff1a14, 0x80800000, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x80800002, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x81398437, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x8ba98d27, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x8ba98d7a, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0xf51f853a, 0xf51f853a, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0xff7ffff0, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0xff7fffff, 0xff7fffff, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0xe6ff1a14, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xe6ff1a14, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xe6ff1a14, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xe6ff1a14, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xe6ff1a14, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xe6ff1a14, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xe6ff1a14, 0x4f3495cb, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0xe73a5134, 0xe79cef1f, 0x3400000}, +{0x3400000, 0xe6ff1a14, 0x7c994e9e, 0x7c994e9e, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x6164bd6c, 0xe6fefd7c, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x9503366, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0xbf5a97c9, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0xe6ff1a14, 0xe77f1a14, 0x3400000}, +{0x3400000, 0xe6ff1a14, 0x77f31e2f, 0x77f31e2f, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0xaab4d7d8, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x966320b, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0xb26bddee, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0xb5c8e5d3, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x317285d3, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x3c9623b1, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x51fd2c7c, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0xe6ff1a14, 0x7b906a6c, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x0, 0x77f31e2f, 0x3400000}, +{0x3400000, 0x77f31e2f, 0x1, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x77f31e2f, 0x76, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x77f31e2f, 0x2b94, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x77f31e2f, 0x636d24, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x77f31e2f, 0x7fffff, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x77f31e2f, 0x800000, 0x77f31e30, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x800002, 0x77f31e30, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x1398437, 0x77f31e30, 0x3400010}, +{0x3400000, 0x77f31e2f, 0xba98d27, 0x77f31e30, 0x3400010}, +{0x3400000, 0x77f31e2f, 0xba98d7a, 0x77f31e30, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x751f853a, 0x77f81a59, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x7f7ffff0, 0x7f800000, 0x3400014}, +{0x3400000, 0x77f31e2f, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x77f31e2f, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x77f31e2f, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x77f31e2f, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x77f31e2f, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x77f31e2f, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x77f31e2f, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x77f31e2f, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x77f31e2f, 0x80000000, 0x77f31e2f, 0x3400000}, +{0x3400000, 0x77f31e2f, 0x80000001, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x77f31e2f, 0x80000076, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x77f31e2f, 0x80002b94, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x77f31e2f, 0x80636d24, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x77f31e2f, 0x807fffff, 0x77f31e2f, 0x3400080}, +{0x3400000, 0x77f31e2f, 0x80800000, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x80800002, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x81398437, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x8ba98d27, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x8ba98d7a, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x77f31e2f, 0xf51f853a, 0x77ee2206, 0x3400010}, +{0x3400000, 0x77f31e2f, 0xff7ffff0, 0xff7ffe09, 0x3400010}, +{0x3400000, 0x77f31e2f, 0xff7fffff, 0xff7ffe18, 0x3400010}, +{0x3400000, 0x77f31e2f, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x77f31e2f, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x77f31e2f, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x77f31e2f, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x77f31e2f, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x77f31e2f, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x77f31e2f, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x77f31e2f, 0x4f3495cb, 0x77f31e30, 0x3400010}, +{0x3400000, 0x77f31e2f, 0xe73a5134, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x7c994e9e, 0x7c998b66, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x6164bd6c, 0x77f31e30, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x9503366, 0x77f31e30, 0x3400010}, +{0x3400000, 0x77f31e2f, 0xbf5a97c9, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x77f31e2f, 0xe6ff1a14, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x77f31e2f, 0x78731e2f, 0x3400000}, +{0x3400000, 0x77f31e2f, 0xaab4d7d8, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x966320b, 0x77f31e30, 0x3400010}, +{0x3400000, 0x77f31e2f, 0xb26bddee, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x77f31e2f, 0xb5c8e5d3, 0x77f31e2f, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x317285d3, 0x77f31e30, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x3c9623b1, 0x77f31e30, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x51fd2c7c, 0x77f31e30, 0x3400010}, +{0x3400000, 0x77f31e2f, 0x7b906a6c, 0x7b915d8b, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x0, 0xaab4d7d8, 0x3400000}, +{0x3400000, 0xaab4d7d8, 0x1, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0xaab4d7d8, 0x76, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0xaab4d7d8, 0x2b94, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0xaab4d7d8, 0x636d24, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0xaab4d7d8, 0x7fffff, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0xaab4d7d8, 0x800000, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x800002, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x1398437, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0xba98d27, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0xba98d7a, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x751f853a, 0x751f853a, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x7f7fffff, 0x7f7fffff, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0xaab4d7d8, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xaab4d7d8, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xaab4d7d8, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xaab4d7d8, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xaab4d7d8, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xaab4d7d8, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xaab4d7d8, 0x80000000, 0xaab4d7d8, 0x3400000}, +{0x3400000, 0xaab4d7d8, 0x80000001, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0xaab4d7d8, 0x80000076, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0xaab4d7d8, 0x80002b94, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0xaab4d7d8, 0x80636d24, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0xaab4d7d8, 0x807fffff, 0xaab4d7d8, 0x3400080}, +{0x3400000, 0xaab4d7d8, 0x80800000, 0xaab4d7d8, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x80800002, 0xaab4d7d8, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x81398437, 0xaab4d7d8, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x8ba98d27, 0xaab4d7d8, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x8ba98d7a, 0xaab4d7d8, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0xf51f853a, 0xf51f853a, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0xff7ffff0, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0xff7fffff, 0xff7fffff, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0xaab4d7d8, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xaab4d7d8, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xaab4d7d8, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xaab4d7d8, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xaab4d7d8, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xaab4d7d8, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xaab4d7d8, 0x4f3495cb, 0x4f3495cb, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0xe73a5134, 0xe73a5134, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x7c994e9e, 0x7c994e9e, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x6164bd6c, 0x6164bd6c, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x9503366, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x77f31e2f, 0x77f31e2f, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0xaab4d7d8, 0xab34d7d8, 0x3400000}, +{0x3400000, 0xaab4d7d8, 0x966320b, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0xb26bddee, 0xb26bdf57, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0xb5c8e5d3, 0xb5c8e5d5, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x317285d3, 0x3172802d, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x3c9623b1, 0x3c9623b1, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0xaab4d7d8, 0x7b906a6c, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x966320b, 0x0, 0x966320b, 0x3400000}, +{0x3400000, 0x966320b, 0x1, 0x966320b, 0x3400080}, +{0x3400000, 0x966320b, 0x76, 0x966320b, 0x3400080}, +{0x3400000, 0x966320b, 0x2b94, 0x966320b, 0x3400080}, +{0x3400000, 0x966320b, 0x636d24, 0x966320b, 0x3400080}, +{0x3400000, 0x966320b, 0x7fffff, 0x966320b, 0x3400080}, +{0x3400000, 0x966320b, 0x800000, 0x966324b, 0x3400000}, +{0x3400000, 0x966320b, 0x800002, 0x966324c, 0x3400010}, +{0x3400000, 0x966320b, 0x1398437, 0x96632c5, 0x3400010}, +{0x3400000, 0x966320b, 0xba98d27, 0xbb0beb8, 0x3400010}, +{0x3400000, 0x966320b, 0xba98d7a, 0xbb0bf0b, 0x3400010}, +{0x3400000, 0x966320b, 0x751f853a, 0x751f853b, 0x3400010}, +{0x3400000, 0x966320b, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x966320b, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x966320b, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x966320b, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x966320b, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x966320b, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x966320b, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x966320b, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x966320b, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x966320b, 0x80000000, 0x966320b, 0x3400000}, +{0x3400000, 0x966320b, 0x80000001, 0x966320b, 0x3400080}, +{0x3400000, 0x966320b, 0x80000076, 0x966320b, 0x3400080}, +{0x3400000, 0x966320b, 0x80002b94, 0x966320b, 0x3400080}, +{0x3400000, 0x966320b, 0x80636d24, 0x966320b, 0x3400080}, +{0x3400000, 0x966320b, 0x807fffff, 0x966320b, 0x3400080}, +{0x3400000, 0x966320b, 0x80800000, 0x96631cb, 0x3400000}, +{0x3400000, 0x966320b, 0x80800002, 0x96631cb, 0x3400010}, +{0x3400000, 0x966320b, 0x81398437, 0x9663152, 0x3400010}, +{0x3400000, 0x966320b, 0x8ba98d27, 0x8ba25b96, 0x3400010}, +{0x3400000, 0x966320b, 0x8ba98d7a, 0x8ba25be9, 0x3400010}, +{0x3400000, 0x966320b, 0xf51f853a, 0xf51f8539, 0x3400010}, +{0x3400000, 0x966320b, 0xff7ffff0, 0xff7fffef, 0x3400010}, +{0x3400000, 0x966320b, 0xff7fffff, 0xff7ffffe, 0x3400010}, +{0x3400000, 0x966320b, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x966320b, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x966320b, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x966320b, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x966320b, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x966320b, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x966320b, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x966320b, 0x4f3495cb, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x966320b, 0xe73a5134, 0xe73a5133, 0x3400010}, +{0x3400000, 0x966320b, 0x7c994e9e, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x966320b, 0x6164bd6c, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x966320b, 0x9503366, 0x9db32b9, 0x3400010}, +{0x3400000, 0x966320b, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0x966320b, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0x966320b, 0x77f31e2f, 0x77f31e30, 0x3400010}, +{0x3400000, 0x966320b, 0xaab4d7d8, 0xaab4d7d7, 0x3400010}, +{0x3400000, 0x966320b, 0x966320b, 0x9e6320b, 0x3400000}, +{0x3400000, 0x966320b, 0xb26bddee, 0xb26bdded, 0x3400010}, +{0x3400000, 0x966320b, 0xb5c8e5d3, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0x966320b, 0x317285d3, 0x317285d4, 0x3400010}, +{0x3400000, 0x966320b, 0x3c9623b1, 0x3c9623b2, 0x3400010}, +{0x3400000, 0x966320b, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x966320b, 0x7b906a6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0xb26bddee, 0x0, 0xb26bddee, 0x3400000}, +{0x3400000, 0xb26bddee, 0x1, 0xb26bddee, 0x3400080}, +{0x3400000, 0xb26bddee, 0x76, 0xb26bddee, 0x3400080}, +{0x3400000, 0xb26bddee, 0x2b94, 0xb26bddee, 0x3400080}, +{0x3400000, 0xb26bddee, 0x636d24, 0xb26bddee, 0x3400080}, +{0x3400000, 0xb26bddee, 0x7fffff, 0xb26bddee, 0x3400080}, +{0x3400000, 0xb26bddee, 0x800000, 0xb26bdded, 0x3400010}, +{0x3400000, 0xb26bddee, 0x800002, 0xb26bdded, 0x3400010}, +{0x3400000, 0xb26bddee, 0x1398437, 0xb26bdded, 0x3400010}, +{0x3400000, 0xb26bddee, 0xba98d27, 0xb26bdded, 0x3400010}, +{0x3400000, 0xb26bddee, 0xba98d7a, 0xb26bdded, 0x3400010}, +{0x3400000, 0xb26bddee, 0x751f853a, 0x751f853a, 0x3400010}, +{0x3400000, 0xb26bddee, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0xb26bddee, 0x7f7fffff, 0x7f7fffff, 0x3400010}, +{0x3400000, 0xb26bddee, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0xb26bddee, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xb26bddee, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xb26bddee, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xb26bddee, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xb26bddee, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xb26bddee, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xb26bddee, 0x80000000, 0xb26bddee, 0x3400000}, +{0x3400000, 0xb26bddee, 0x80000001, 0xb26bddee, 0x3400080}, +{0x3400000, 0xb26bddee, 0x80000076, 0xb26bddee, 0x3400080}, +{0x3400000, 0xb26bddee, 0x80002b94, 0xb26bddee, 0x3400080}, +{0x3400000, 0xb26bddee, 0x80636d24, 0xb26bddee, 0x3400080}, +{0x3400000, 0xb26bddee, 0x807fffff, 0xb26bddee, 0x3400080}, +{0x3400000, 0xb26bddee, 0x80800000, 0xb26bddee, 0x3400010}, +{0x3400000, 0xb26bddee, 0x80800002, 0xb26bddee, 0x3400010}, +{0x3400000, 0xb26bddee, 0x81398437, 0xb26bddee, 0x3400010}, +{0x3400000, 0xb26bddee, 0x8ba98d27, 0xb26bddee, 0x3400010}, +{0x3400000, 0xb26bddee, 0x8ba98d7a, 0xb26bddee, 0x3400010}, +{0x3400000, 0xb26bddee, 0xf51f853a, 0xf51f853a, 0x3400010}, +{0x3400000, 0xb26bddee, 0xff7ffff0, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xb26bddee, 0xff7fffff, 0xff7fffff, 0x3400010}, +{0x3400000, 0xb26bddee, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0xb26bddee, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xb26bddee, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xb26bddee, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xb26bddee, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xb26bddee, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xb26bddee, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xb26bddee, 0x4f3495cb, 0x4f3495cb, 0x3400010}, +{0x3400000, 0xb26bddee, 0xe73a5134, 0xe73a5134, 0x3400010}, +{0x3400000, 0xb26bddee, 0x7c994e9e, 0x7c994e9e, 0x3400010}, +{0x3400000, 0xb26bddee, 0x6164bd6c, 0x6164bd6c, 0x3400010}, +{0x3400000, 0xb26bddee, 0x9503366, 0xb26bdded, 0x3400010}, +{0x3400000, 0xb26bddee, 0xbf5a97c9, 0xbf5a97c9, 0x3400010}, +{0x3400000, 0xb26bddee, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xb26bddee, 0x77f31e2f, 0x77f31e2f, 0x3400010}, +{0x3400000, 0xb26bddee, 0xaab4d7d8, 0xb26bdf57, 0x3400010}, +{0x3400000, 0xb26bddee, 0x966320b, 0xb26bdded, 0x3400010}, +{0x3400000, 0xb26bddee, 0xb26bddee, 0xb2ebddee, 0x3400000}, +{0x3400000, 0xb26bddee, 0xb5c8e5d3, 0xb5cabd8e, 0x3400010}, +{0x3400000, 0xb26bddee, 0x317285d3, 0xb22f3c79, 0x3400010}, +{0x3400000, 0xb26bddee, 0x3c9623b1, 0x3c9623aa, 0x3400010}, +{0x3400000, 0xb26bddee, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0xb26bddee, 0x7b906a6c, 0x7b906a6c, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x0, 0xb5c8e5d3, 0x3400000}, +{0x3400000, 0xb5c8e5d3, 0x1, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0xb5c8e5d3, 0x76, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0xb5c8e5d3, 0x2b94, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0xb5c8e5d3, 0x636d24, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0xb5c8e5d3, 0x7fffff, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0xb5c8e5d3, 0x800000, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x800002, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x1398437, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0xba98d27, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0xba98d7a, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x751f853a, 0x751f853a, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x7f7ffff0, 0x7f7ffff0, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x7f7fffff, 0x7f7fffff, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0xb5c8e5d3, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xb5c8e5d3, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xb5c8e5d3, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xb5c8e5d3, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xb5c8e5d3, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xb5c8e5d3, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xb5c8e5d3, 0x80000000, 0xb5c8e5d3, 0x3400000}, +{0x3400000, 0xb5c8e5d3, 0x80000001, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0xb5c8e5d3, 0x80000076, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0xb5c8e5d3, 0x80002b94, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0xb5c8e5d3, 0x80636d24, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0xb5c8e5d3, 0x807fffff, 0xb5c8e5d3, 0x3400080}, +{0x3400000, 0xb5c8e5d3, 0x80800000, 0xb5c8e5d3, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x80800002, 0xb5c8e5d3, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x81398437, 0xb5c8e5d3, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x8ba98d27, 0xb5c8e5d3, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x8ba98d7a, 0xb5c8e5d3, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0xf51f853a, 0xf51f853a, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0xff7ffff0, 0xff7ffff0, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0xff7fffff, 0xff7fffff, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0xb5c8e5d3, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0xb5c8e5d3, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0xb5c8e5d3, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0xb5c8e5d3, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0xb5c8e5d3, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0xb5c8e5d3, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0xb5c8e5d3, 0x4f3495cb, 0x4f3495cb, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0xe73a5134, 0xe73a5134, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x7c994e9e, 0x7c994e9e, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x6164bd6c, 0x6164bd6c, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x9503366, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0xbf5a97c9, 0xbf5a97e2, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0xe6ff1a14, 0xe6ff1a14, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x77f31e2f, 0x77f31e2f, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0xaab4d7d8, 0xb5c8e5d5, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x966320b, 0xb5c8e5d2, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0xb26bddee, 0xb5cabd8e, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0xb5c8e5d3, 0xb648e5d3, 0x3400000}, +{0x3400000, 0xb5c8e5d3, 0x317285d3, 0xb5c86c90, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x3c9623b1, 0x3c96208e, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x51fd2c7c, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0xb5c8e5d3, 0x7b906a6c, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x317285d3, 0x0, 0x317285d3, 0x3400000}, +{0x3400000, 0x317285d3, 0x1, 0x317285d3, 0x3400080}, +{0x3400000, 0x317285d3, 0x76, 0x317285d3, 0x3400080}, +{0x3400000, 0x317285d3, 0x2b94, 0x317285d3, 0x3400080}, +{0x3400000, 0x317285d3, 0x636d24, 0x317285d3, 0x3400080}, +{0x3400000, 0x317285d3, 0x7fffff, 0x317285d3, 0x3400080}, +{0x3400000, 0x317285d3, 0x800000, 0x317285d4, 0x3400010}, +{0x3400000, 0x317285d3, 0x800002, 0x317285d4, 0x3400010}, +{0x3400000, 0x317285d3, 0x1398437, 0x317285d4, 0x3400010}, +{0x3400000, 0x317285d3, 0xba98d27, 0x317285d4, 0x3400010}, +{0x3400000, 0x317285d3, 0xba98d7a, 0x317285d4, 0x3400010}, +{0x3400000, 0x317285d3, 0x751f853a, 0x751f853b, 0x3400010}, +{0x3400000, 0x317285d3, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x317285d3, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x317285d3, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x317285d3, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x317285d3, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x317285d3, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x317285d3, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x317285d3, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x317285d3, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x317285d3, 0x80000000, 0x317285d3, 0x3400000}, +{0x3400000, 0x317285d3, 0x80000001, 0x317285d3, 0x3400080}, +{0x3400000, 0x317285d3, 0x80000076, 0x317285d3, 0x3400080}, +{0x3400000, 0x317285d3, 0x80002b94, 0x317285d3, 0x3400080}, +{0x3400000, 0x317285d3, 0x80636d24, 0x317285d3, 0x3400080}, +{0x3400000, 0x317285d3, 0x807fffff, 0x317285d3, 0x3400080}, +{0x3400000, 0x317285d3, 0x80800000, 0x317285d3, 0x3400010}, +{0x3400000, 0x317285d3, 0x80800002, 0x317285d3, 0x3400010}, +{0x3400000, 0x317285d3, 0x81398437, 0x317285d3, 0x3400010}, +{0x3400000, 0x317285d3, 0x8ba98d27, 0x317285d3, 0x3400010}, +{0x3400000, 0x317285d3, 0x8ba98d7a, 0x317285d3, 0x3400010}, +{0x3400000, 0x317285d3, 0xf51f853a, 0xf51f8539, 0x3400010}, +{0x3400000, 0x317285d3, 0xff7ffff0, 0xff7fffef, 0x3400010}, +{0x3400000, 0x317285d3, 0xff7fffff, 0xff7ffffe, 0x3400010}, +{0x3400000, 0x317285d3, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x317285d3, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x317285d3, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x317285d3, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x317285d3, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x317285d3, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x317285d3, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x317285d3, 0x4f3495cb, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x317285d3, 0xe73a5134, 0xe73a5133, 0x3400010}, +{0x3400000, 0x317285d3, 0x7c994e9e, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x317285d3, 0x6164bd6c, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x317285d3, 0x9503366, 0x317285d4, 0x3400010}, +{0x3400000, 0x317285d3, 0xbf5a97c9, 0xbf5a97c8, 0x3400010}, +{0x3400000, 0x317285d3, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0x317285d3, 0x77f31e2f, 0x77f31e30, 0x3400010}, +{0x3400000, 0x317285d3, 0xaab4d7d8, 0x3172802d, 0x3400010}, +{0x3400000, 0x317285d3, 0x966320b, 0x317285d4, 0x3400010}, +{0x3400000, 0x317285d3, 0xb26bddee, 0xb22f3c79, 0x3400010}, +{0x3400000, 0x317285d3, 0xb5c8e5d3, 0xb5c86c90, 0x3400010}, +{0x3400000, 0x317285d3, 0x317285d3, 0x31f285d3, 0x3400000}, +{0x3400000, 0x317285d3, 0x3c9623b1, 0x3c9623b3, 0x3400010}, +{0x3400000, 0x317285d3, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x317285d3, 0x7b906a6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x0, 0x3c9623b1, 0x3400000}, +{0x3400000, 0x3c9623b1, 0x1, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x3c9623b1, 0x76, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x3c9623b1, 0x2b94, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x3c9623b1, 0x636d24, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x3c9623b1, 0x7fffff, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x3c9623b1, 0x800000, 0x3c9623b2, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x800002, 0x3c9623b2, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x1398437, 0x3c9623b2, 0x3400010}, +{0x3400000, 0x3c9623b1, 0xba98d27, 0x3c9623b2, 0x3400010}, +{0x3400000, 0x3c9623b1, 0xba98d7a, 0x3c9623b2, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x751f853a, 0x751f853b, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x3c9623b1, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x3c9623b1, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x3c9623b1, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x3c9623b1, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x3c9623b1, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x3c9623b1, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x3c9623b1, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x3c9623b1, 0x80000000, 0x3c9623b1, 0x3400000}, +{0x3400000, 0x3c9623b1, 0x80000001, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x3c9623b1, 0x80000076, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x3c9623b1, 0x80002b94, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x3c9623b1, 0x80636d24, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x3c9623b1, 0x807fffff, 0x3c9623b1, 0x3400080}, +{0x3400000, 0x3c9623b1, 0x80800000, 0x3c9623b1, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x80800002, 0x3c9623b1, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x81398437, 0x3c9623b1, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x8ba98d27, 0x3c9623b1, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x8ba98d7a, 0x3c9623b1, 0x3400010}, +{0x3400000, 0x3c9623b1, 0xf51f853a, 0xf51f8539, 0x3400010}, +{0x3400000, 0x3c9623b1, 0xff7ffff0, 0xff7fffef, 0x3400010}, +{0x3400000, 0x3c9623b1, 0xff7fffff, 0xff7ffffe, 0x3400010}, +{0x3400000, 0x3c9623b1, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x3c9623b1, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x3c9623b1, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x3c9623b1, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x3c9623b1, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x3c9623b1, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x3c9623b1, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x3c9623b1, 0x4f3495cb, 0x4f3495cc, 0x3400010}, +{0x3400000, 0x3c9623b1, 0xe73a5134, 0xe73a5133, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x7c994e9e, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x6164bd6c, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x9503366, 0x3c9623b2, 0x3400010}, +{0x3400000, 0x3c9623b1, 0xbf5a97c9, 0xbf55e6ab, 0x3400010}, +{0x3400000, 0x3c9623b1, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x77f31e2f, 0x77f31e30, 0x3400010}, +{0x3400000, 0x3c9623b1, 0xaab4d7d8, 0x3c9623b1, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x966320b, 0x3c9623b2, 0x3400010}, +{0x3400000, 0x3c9623b1, 0xb26bddee, 0x3c9623aa, 0x3400010}, +{0x3400000, 0x3c9623b1, 0xb5c8e5d3, 0x3c96208e, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x317285d3, 0x3c9623b3, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x3c9623b1, 0x3d1623b1, 0x3400000}, +{0x3400000, 0x3c9623b1, 0x51fd2c7c, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x3c9623b1, 0x7b906a6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x0, 0x51fd2c7c, 0x3400000}, +{0x3400000, 0x51fd2c7c, 0x1, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x51fd2c7c, 0x76, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x51fd2c7c, 0x2b94, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x51fd2c7c, 0x636d24, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x51fd2c7c, 0x7fffff, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x51fd2c7c, 0x800000, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x800002, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x1398437, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0xba98d27, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0xba98d7a, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x751f853a, 0x751f853b, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x7f7ffff0, 0x7f7ffff1, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x51fd2c7c, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x51fd2c7c, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x51fd2c7c, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x51fd2c7c, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x51fd2c7c, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x51fd2c7c, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x51fd2c7c, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x51fd2c7c, 0x80000000, 0x51fd2c7c, 0x3400000}, +{0x3400000, 0x51fd2c7c, 0x80000001, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x51fd2c7c, 0x80000076, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x51fd2c7c, 0x80002b94, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x51fd2c7c, 0x80636d24, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x51fd2c7c, 0x807fffff, 0x51fd2c7c, 0x3400080}, +{0x3400000, 0x51fd2c7c, 0x80800000, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x80800002, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x81398437, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x8ba98d27, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x8ba98d7a, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0xf51f853a, 0xf51f8539, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0xff7ffff0, 0xff7fffef, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0xff7fffff, 0xff7ffffe, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x51fd2c7c, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x51fd2c7c, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x51fd2c7c, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x51fd2c7c, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x51fd2c7c, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x51fd2c7c, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x51fd2c7c, 0x4f3495cb, 0x52016896, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0xe73a5134, 0xe73a5133, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x7c994e9e, 0x7c994e9f, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x6164bd6c, 0x6164bd6d, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x9503366, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0xbf5a97c9, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0xe6ff1a14, 0xe6ff1a13, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x77f31e2f, 0x77f31e30, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0xaab4d7d8, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x966320b, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0xb26bddee, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0xb5c8e5d3, 0x51fd2c7c, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x317285d3, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x3c9623b1, 0x51fd2c7d, 0x3400010}, +{0x3400000, 0x51fd2c7c, 0x51fd2c7c, 0x527d2c7c, 0x3400000}, +{0x3400000, 0x51fd2c7c, 0x7b906a6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x0, 0x7b906a6c, 0x3400000}, +{0x3400000, 0x7b906a6c, 0x1, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x7b906a6c, 0x76, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x7b906a6c, 0x2b94, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x7b906a6c, 0x636d24, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x7b906a6c, 0x7fffff, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x7b906a6c, 0x800000, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x800002, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x1398437, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0xba98d27, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0xba98d7a, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x751f853a, 0x7b906f69, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x7f7ffff0, 0x7f800000, 0x3400014}, +{0x3400000, 0x7b906a6c, 0x7f7fffff, 0x7f800000, 0x3400014}, +{0x3400000, 0x7b906a6c, 0x7f800000, 0x7f800000, 0x3400000}, +{0x3400000, 0x7b906a6c, 0x7f800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7b906a6c, 0x7f984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7b906a6c, 0x7fbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7b906a6c, 0x7fc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7b906a6c, 0x7fd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7b906a6c, 0x7fffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7b906a6c, 0x80000000, 0x7b906a6c, 0x3400000}, +{0x3400000, 0x7b906a6c, 0x80000001, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x7b906a6c, 0x80000076, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x7b906a6c, 0x80002b94, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x7b906a6c, 0x80636d24, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x7b906a6c, 0x807fffff, 0x7b906a6c, 0x3400080}, +{0x3400000, 0x7b906a6c, 0x80800000, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x80800002, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x81398437, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x8ba98d27, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x8ba98d7a, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x7b906a6c, 0xf51f853a, 0x7b906570, 0x3400010}, +{0x3400000, 0x7b906a6c, 0xff7ffff0, 0xff7edf1b, 0x3400010}, +{0x3400000, 0x7b906a6c, 0xff7fffff, 0xff7edf2a, 0x3400010}, +{0x3400000, 0x7b906a6c, 0xff800000, 0xff800000, 0x3400000}, +{0x3400000, 0x7b906a6c, 0xff800001, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7b906a6c, 0xff984a37, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7b906a6c, 0xffbfffff, 0x7fc00000, 0x3400001}, +{0x3400000, 0x7b906a6c, 0xffc00000, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7b906a6c, 0xffd9ba98, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7b906a6c, 0xffffffff, 0x7fc00000, 0x3400000}, +{0x3400000, 0x7b906a6c, 0x4f3495cb, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0xe73a5134, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x7c994e9e, 0x7cbd6939, 0x3400000}, +{0x3400000, 0x7b906a6c, 0x6164bd6c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x9503366, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0xbf5a97c9, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x7b906a6c, 0xe6ff1a14, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x77f31e2f, 0x7b915d8b, 0x3400010}, +{0x3400000, 0x7b906a6c, 0xaab4d7d8, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x966320b, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0xb26bddee, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x7b906a6c, 0xb5c8e5d3, 0x7b906a6c, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x317285d3, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x3c9623b1, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x51fd2c7c, 0x7b906a6d, 0x3400010}, +{0x3400000, 0x7b906a6c, 0x7b906a6c, 0x7c106a6c, 0x3400000}, +{0x3000000, 0x0, 0x0, 0x0, 0x3000000}, +{0x3000000, 0x0, 0x1, 0x0, 0x3000080}, +{0x3000000, 0x0, 0x76, 0x0, 0x3000080}, +{0x3000000, 0x0, 0x2b94, 0x0, 0x3000080}, +{0x3000000, 0x0, 0x636d24, 0x0, 0x3000080}, +{0x3000000, 0x0, 0x7fffff, 0x0, 0x3000080}, +{0x3000000, 0x0, 0x800000, 0x800000, 0x3000000}, +{0x3000000, 0x0, 0x800002, 0x800002, 0x3000000}, +{0x3000000, 0x0, 0x1398437, 0x1398437, 0x3000000}, +{0x3000000, 0x0, 0xba98d27, 0xba98d27, 0x3000000}, +{0x3000000, 0x0, 0xba98d7a, 0xba98d7a, 0x3000000}, +{0x3000000, 0x0, 0x751f853a, 0x751f853a, 0x3000000}, +{0x3000000, 0x0, 0x7f7ffff0, 0x7f7ffff0, 0x3000000}, +{0x3000000, 0x0, 0x7f7fffff, 0x7f7fffff, 0x3000000}, +{0x3000000, 0x0, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x0, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x0, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x0, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x0, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x0, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x0, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x0, 0x80000000, 0x0, 0x3000000}, +{0x3000000, 0x0, 0x80000001, 0x0, 0x3000080}, +{0x3000000, 0x0, 0x80000076, 0x0, 0x3000080}, +{0x3000000, 0x0, 0x80002b94, 0x0, 0x3000080}, +{0x3000000, 0x0, 0x80636d24, 0x0, 0x3000080}, +{0x3000000, 0x0, 0x807fffff, 0x0, 0x3000080}, +{0x3000000, 0x0, 0x80800000, 0x80800000, 0x3000000}, +{0x3000000, 0x0, 0x80800002, 0x80800002, 0x3000000}, +{0x3000000, 0x0, 0x81398437, 0x81398437, 0x3000000}, +{0x3000000, 0x0, 0x8ba98d27, 0x8ba98d27, 0x3000000}, +{0x3000000, 0x0, 0x8ba98d7a, 0x8ba98d7a, 0x3000000}, +{0x3000000, 0x0, 0xf51f853a, 0xf51f853a, 0x3000000}, +{0x3000000, 0x0, 0xff7ffff0, 0xff7ffff0, 0x3000000}, +{0x3000000, 0x0, 0xff7fffff, 0xff7fffff, 0x3000000}, +{0x3000000, 0x0, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x0, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x0, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x0, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x0, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x0, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x0, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x0, 0x4f3495cb, 0x4f3495cb, 0x3000000}, +{0x3000000, 0x0, 0xe73a5134, 0xe73a5134, 0x3000000}, +{0x3000000, 0x0, 0x7c994e9e, 0x7c994e9e, 0x3000000}, +{0x3000000, 0x0, 0x6164bd6c, 0x6164bd6c, 0x3000000}, +{0x3000000, 0x0, 0x9503366, 0x9503366, 0x3000000}, +{0x3000000, 0x0, 0xbf5a97c9, 0xbf5a97c9, 0x3000000}, +{0x3000000, 0x0, 0xe6ff1a14, 0xe6ff1a14, 0x3000000}, +{0x3000000, 0x0, 0x77f31e2f, 0x77f31e2f, 0x3000000}, +{0x3000000, 0x0, 0xaab4d7d8, 0xaab4d7d8, 0x3000000}, +{0x3000000, 0x0, 0x966320b, 0x966320b, 0x3000000}, +{0x3000000, 0x0, 0xb26bddee, 0xb26bddee, 0x3000000}, +{0x3000000, 0x0, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000000}, +{0x3000000, 0x0, 0x317285d3, 0x317285d3, 0x3000000}, +{0x3000000, 0x0, 0x3c9623b1, 0x3c9623b1, 0x3000000}, +{0x3000000, 0x0, 0x51fd2c7c, 0x51fd2c7c, 0x3000000}, +{0x3000000, 0x0, 0x7b906a6c, 0x7b906a6c, 0x3000000}, +{0x3000000, 0x1, 0x0, 0x0, 0x3000080}, +{0x3000000, 0x1, 0x1, 0x0, 0x3000080}, +{0x3000000, 0x1, 0x76, 0x0, 0x3000080}, +{0x3000000, 0x1, 0x2b94, 0x0, 0x3000080}, +{0x3000000, 0x1, 0x636d24, 0x0, 0x3000080}, +{0x3000000, 0x1, 0x7fffff, 0x0, 0x3000080}, +{0x3000000, 0x1, 0x800000, 0x800000, 0x3000080}, +{0x3000000, 0x1, 0x800002, 0x800002, 0x3000080}, +{0x3000000, 0x1, 0x1398437, 0x1398437, 0x3000080}, +{0x3000000, 0x1, 0xba98d27, 0xba98d27, 0x3000080}, +{0x3000000, 0x1, 0xba98d7a, 0xba98d7a, 0x3000080}, +{0x3000000, 0x1, 0x751f853a, 0x751f853a, 0x3000080}, +{0x3000000, 0x1, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x1, 0x7f7fffff, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x1, 0x7f800000, 0x7f800000, 0x3000080}, +{0x3000000, 0x1, 0x7f800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x1, 0x7f984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x1, 0x7fbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x1, 0x7fc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x1, 0x7fd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x1, 0x7fffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x1, 0x80000000, 0x0, 0x3000080}, +{0x3000000, 0x1, 0x80000001, 0x0, 0x3000080}, +{0x3000000, 0x1, 0x80000076, 0x0, 0x3000080}, +{0x3000000, 0x1, 0x80002b94, 0x0, 0x3000080}, +{0x3000000, 0x1, 0x80636d24, 0x0, 0x3000080}, +{0x3000000, 0x1, 0x807fffff, 0x0, 0x3000080}, +{0x3000000, 0x1, 0x80800000, 0x80800000, 0x3000080}, +{0x3000000, 0x1, 0x80800002, 0x80800002, 0x3000080}, +{0x3000000, 0x1, 0x81398437, 0x81398437, 0x3000080}, +{0x3000000, 0x1, 0x8ba98d27, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x1, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x1, 0xf51f853a, 0xf51f853a, 0x3000080}, +{0x3000000, 0x1, 0xff7ffff0, 0xff7ffff0, 0x3000080}, +{0x3000000, 0x1, 0xff7fffff, 0xff7fffff, 0x3000080}, +{0x3000000, 0x1, 0xff800000, 0xff800000, 0x3000080}, +{0x3000000, 0x1, 0xff800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x1, 0xff984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x1, 0xffbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x1, 0xffc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x1, 0xffd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x1, 0xffffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x1, 0x4f3495cb, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x1, 0xe73a5134, 0xe73a5134, 0x3000080}, +{0x3000000, 0x1, 0x7c994e9e, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x1, 0x6164bd6c, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x1, 0x9503366, 0x9503366, 0x3000080}, +{0x3000000, 0x1, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0x1, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0x1, 0x77f31e2f, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x1, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0x1, 0x966320b, 0x966320b, 0x3000080}, +{0x3000000, 0x1, 0xb26bddee, 0xb26bddee, 0x3000080}, +{0x3000000, 0x1, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0x1, 0x317285d3, 0x317285d3, 0x3000080}, +{0x3000000, 0x1, 0x3c9623b1, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x1, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x1, 0x7b906a6c, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x76, 0x0, 0x0, 0x3000080}, +{0x3000000, 0x76, 0x1, 0x0, 0x3000080}, +{0x3000000, 0x76, 0x76, 0x0, 0x3000080}, +{0x3000000, 0x76, 0x2b94, 0x0, 0x3000080}, +{0x3000000, 0x76, 0x636d24, 0x0, 0x3000080}, +{0x3000000, 0x76, 0x7fffff, 0x0, 0x3000080}, +{0x3000000, 0x76, 0x800000, 0x800000, 0x3000080}, +{0x3000000, 0x76, 0x800002, 0x800002, 0x3000080}, +{0x3000000, 0x76, 0x1398437, 0x1398437, 0x3000080}, +{0x3000000, 0x76, 0xba98d27, 0xba98d27, 0x3000080}, +{0x3000000, 0x76, 0xba98d7a, 0xba98d7a, 0x3000080}, +{0x3000000, 0x76, 0x751f853a, 0x751f853a, 0x3000080}, +{0x3000000, 0x76, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x76, 0x7f7fffff, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x76, 0x7f800000, 0x7f800000, 0x3000080}, +{0x3000000, 0x76, 0x7f800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x76, 0x7f984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x76, 0x7fbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x76, 0x7fc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x76, 0x7fd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x76, 0x7fffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x76, 0x80000000, 0x0, 0x3000080}, +{0x3000000, 0x76, 0x80000001, 0x0, 0x3000080}, +{0x3000000, 0x76, 0x80000076, 0x0, 0x3000080}, +{0x3000000, 0x76, 0x80002b94, 0x0, 0x3000080}, +{0x3000000, 0x76, 0x80636d24, 0x0, 0x3000080}, +{0x3000000, 0x76, 0x807fffff, 0x0, 0x3000080}, +{0x3000000, 0x76, 0x80800000, 0x80800000, 0x3000080}, +{0x3000000, 0x76, 0x80800002, 0x80800002, 0x3000080}, +{0x3000000, 0x76, 0x81398437, 0x81398437, 0x3000080}, +{0x3000000, 0x76, 0x8ba98d27, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x76, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x76, 0xf51f853a, 0xf51f853a, 0x3000080}, +{0x3000000, 0x76, 0xff7ffff0, 0xff7ffff0, 0x3000080}, +{0x3000000, 0x76, 0xff7fffff, 0xff7fffff, 0x3000080}, +{0x3000000, 0x76, 0xff800000, 0xff800000, 0x3000080}, +{0x3000000, 0x76, 0xff800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x76, 0xff984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x76, 0xffbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x76, 0xffc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x76, 0xffd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x76, 0xffffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x76, 0x4f3495cb, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x76, 0xe73a5134, 0xe73a5134, 0x3000080}, +{0x3000000, 0x76, 0x7c994e9e, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x76, 0x6164bd6c, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x76, 0x9503366, 0x9503366, 0x3000080}, +{0x3000000, 0x76, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0x76, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0x76, 0x77f31e2f, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x76, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0x76, 0x966320b, 0x966320b, 0x3000080}, +{0x3000000, 0x76, 0xb26bddee, 0xb26bddee, 0x3000080}, +{0x3000000, 0x76, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0x76, 0x317285d3, 0x317285d3, 0x3000080}, +{0x3000000, 0x76, 0x3c9623b1, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x76, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x76, 0x7b906a6c, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x2b94, 0x0, 0x0, 0x3000080}, +{0x3000000, 0x2b94, 0x1, 0x0, 0x3000080}, +{0x3000000, 0x2b94, 0x76, 0x0, 0x3000080}, +{0x3000000, 0x2b94, 0x2b94, 0x0, 0x3000080}, +{0x3000000, 0x2b94, 0x636d24, 0x0, 0x3000080}, +{0x3000000, 0x2b94, 0x7fffff, 0x0, 0x3000080}, +{0x3000000, 0x2b94, 0x800000, 0x800000, 0x3000080}, +{0x3000000, 0x2b94, 0x800002, 0x800002, 0x3000080}, +{0x3000000, 0x2b94, 0x1398437, 0x1398437, 0x3000080}, +{0x3000000, 0x2b94, 0xba98d27, 0xba98d27, 0x3000080}, +{0x3000000, 0x2b94, 0xba98d7a, 0xba98d7a, 0x3000080}, +{0x3000000, 0x2b94, 0x751f853a, 0x751f853a, 0x3000080}, +{0x3000000, 0x2b94, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x2b94, 0x7f7fffff, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x2b94, 0x7f800000, 0x7f800000, 0x3000080}, +{0x3000000, 0x2b94, 0x7f800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x2b94, 0x7f984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x2b94, 0x7fbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x2b94, 0x7fc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x2b94, 0x7fd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x2b94, 0x7fffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x2b94, 0x80000000, 0x0, 0x3000080}, +{0x3000000, 0x2b94, 0x80000001, 0x0, 0x3000080}, +{0x3000000, 0x2b94, 0x80000076, 0x0, 0x3000080}, +{0x3000000, 0x2b94, 0x80002b94, 0x0, 0x3000080}, +{0x3000000, 0x2b94, 0x80636d24, 0x0, 0x3000080}, +{0x3000000, 0x2b94, 0x807fffff, 0x0, 0x3000080}, +{0x3000000, 0x2b94, 0x80800000, 0x80800000, 0x3000080}, +{0x3000000, 0x2b94, 0x80800002, 0x80800002, 0x3000080}, +{0x3000000, 0x2b94, 0x81398437, 0x81398437, 0x3000080}, +{0x3000000, 0x2b94, 0x8ba98d27, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x2b94, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x2b94, 0xf51f853a, 0xf51f853a, 0x3000080}, +{0x3000000, 0x2b94, 0xff7ffff0, 0xff7ffff0, 0x3000080}, +{0x3000000, 0x2b94, 0xff7fffff, 0xff7fffff, 0x3000080}, +{0x3000000, 0x2b94, 0xff800000, 0xff800000, 0x3000080}, +{0x3000000, 0x2b94, 0xff800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x2b94, 0xff984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x2b94, 0xffbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x2b94, 0xffc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x2b94, 0xffd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x2b94, 0xffffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x2b94, 0x4f3495cb, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x2b94, 0xe73a5134, 0xe73a5134, 0x3000080}, +{0x3000000, 0x2b94, 0x7c994e9e, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x2b94, 0x6164bd6c, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x2b94, 0x9503366, 0x9503366, 0x3000080}, +{0x3000000, 0x2b94, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0x2b94, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0x2b94, 0x77f31e2f, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x2b94, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0x2b94, 0x966320b, 0x966320b, 0x3000080}, +{0x3000000, 0x2b94, 0xb26bddee, 0xb26bddee, 0x3000080}, +{0x3000000, 0x2b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0x2b94, 0x317285d3, 0x317285d3, 0x3000080}, +{0x3000000, 0x2b94, 0x3c9623b1, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x2b94, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x2b94, 0x7b906a6c, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x636d24, 0x0, 0x0, 0x3000080}, +{0x3000000, 0x636d24, 0x1, 0x0, 0x3000080}, +{0x3000000, 0x636d24, 0x76, 0x0, 0x3000080}, +{0x3000000, 0x636d24, 0x2b94, 0x0, 0x3000080}, +{0x3000000, 0x636d24, 0x636d24, 0x0, 0x3000080}, +{0x3000000, 0x636d24, 0x7fffff, 0x0, 0x3000080}, +{0x3000000, 0x636d24, 0x800000, 0x800000, 0x3000080}, +{0x3000000, 0x636d24, 0x800002, 0x800002, 0x3000080}, +{0x3000000, 0x636d24, 0x1398437, 0x1398437, 0x3000080}, +{0x3000000, 0x636d24, 0xba98d27, 0xba98d27, 0x3000080}, +{0x3000000, 0x636d24, 0xba98d7a, 0xba98d7a, 0x3000080}, +{0x3000000, 0x636d24, 0x751f853a, 0x751f853a, 0x3000080}, +{0x3000000, 0x636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x636d24, 0x7f7fffff, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x636d24, 0x7f800000, 0x7f800000, 0x3000080}, +{0x3000000, 0x636d24, 0x7f800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x636d24, 0x7f984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x636d24, 0x7fbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x636d24, 0x7fc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x636d24, 0x7fd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x636d24, 0x7fffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x636d24, 0x80000000, 0x0, 0x3000080}, +{0x3000000, 0x636d24, 0x80000001, 0x0, 0x3000080}, +{0x3000000, 0x636d24, 0x80000076, 0x0, 0x3000080}, +{0x3000000, 0x636d24, 0x80002b94, 0x0, 0x3000080}, +{0x3000000, 0x636d24, 0x80636d24, 0x0, 0x3000080}, +{0x3000000, 0x636d24, 0x807fffff, 0x0, 0x3000080}, +{0x3000000, 0x636d24, 0x80800000, 0x80800000, 0x3000080}, +{0x3000000, 0x636d24, 0x80800002, 0x80800002, 0x3000080}, +{0x3000000, 0x636d24, 0x81398437, 0x81398437, 0x3000080}, +{0x3000000, 0x636d24, 0x8ba98d27, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x636d24, 0xf51f853a, 0xf51f853a, 0x3000080}, +{0x3000000, 0x636d24, 0xff7ffff0, 0xff7ffff0, 0x3000080}, +{0x3000000, 0x636d24, 0xff7fffff, 0xff7fffff, 0x3000080}, +{0x3000000, 0x636d24, 0xff800000, 0xff800000, 0x3000080}, +{0x3000000, 0x636d24, 0xff800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x636d24, 0xff984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x636d24, 0xffbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x636d24, 0xffc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x636d24, 0xffd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x636d24, 0xffffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x636d24, 0x4f3495cb, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x636d24, 0xe73a5134, 0xe73a5134, 0x3000080}, +{0x3000000, 0x636d24, 0x7c994e9e, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x636d24, 0x6164bd6c, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x636d24, 0x9503366, 0x9503366, 0x3000080}, +{0x3000000, 0x636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0x636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0x636d24, 0x77f31e2f, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0x636d24, 0x966320b, 0x966320b, 0x3000080}, +{0x3000000, 0x636d24, 0xb26bddee, 0xb26bddee, 0x3000080}, +{0x3000000, 0x636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0x636d24, 0x317285d3, 0x317285d3, 0x3000080}, +{0x3000000, 0x636d24, 0x3c9623b1, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x636d24, 0x7b906a6c, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x7fffff, 0x0, 0x0, 0x3000080}, +{0x3000000, 0x7fffff, 0x1, 0x0, 0x3000080}, +{0x3000000, 0x7fffff, 0x76, 0x0, 0x3000080}, +{0x3000000, 0x7fffff, 0x2b94, 0x0, 0x3000080}, +{0x3000000, 0x7fffff, 0x636d24, 0x0, 0x3000080}, +{0x3000000, 0x7fffff, 0x7fffff, 0x0, 0x3000080}, +{0x3000000, 0x7fffff, 0x800000, 0x800000, 0x3000080}, +{0x3000000, 0x7fffff, 0x800002, 0x800002, 0x3000080}, +{0x3000000, 0x7fffff, 0x1398437, 0x1398437, 0x3000080}, +{0x3000000, 0x7fffff, 0xba98d27, 0xba98d27, 0x3000080}, +{0x3000000, 0x7fffff, 0xba98d7a, 0xba98d7a, 0x3000080}, +{0x3000000, 0x7fffff, 0x751f853a, 0x751f853a, 0x3000080}, +{0x3000000, 0x7fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x7fffff, 0x7f7fffff, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x7fffff, 0x7f800000, 0x7f800000, 0x3000080}, +{0x3000000, 0x7fffff, 0x7f800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fffff, 0x7f984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fffff, 0x7fbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fffff, 0x7fc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffff, 0x7fd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffff, 0x7fffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffff, 0x80000000, 0x0, 0x3000080}, +{0x3000000, 0x7fffff, 0x80000001, 0x0, 0x3000080}, +{0x3000000, 0x7fffff, 0x80000076, 0x0, 0x3000080}, +{0x3000000, 0x7fffff, 0x80002b94, 0x0, 0x3000080}, +{0x3000000, 0x7fffff, 0x80636d24, 0x0, 0x3000080}, +{0x3000000, 0x7fffff, 0x807fffff, 0x0, 0x3000080}, +{0x3000000, 0x7fffff, 0x80800000, 0x80800000, 0x3000080}, +{0x3000000, 0x7fffff, 0x80800002, 0x80800002, 0x3000080}, +{0x3000000, 0x7fffff, 0x81398437, 0x81398437, 0x3000080}, +{0x3000000, 0x7fffff, 0x8ba98d27, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x7fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x7fffff, 0xf51f853a, 0xf51f853a, 0x3000080}, +{0x3000000, 0x7fffff, 0xff7ffff0, 0xff7ffff0, 0x3000080}, +{0x3000000, 0x7fffff, 0xff7fffff, 0xff7fffff, 0x3000080}, +{0x3000000, 0x7fffff, 0xff800000, 0xff800000, 0x3000080}, +{0x3000000, 0x7fffff, 0xff800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fffff, 0xff984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fffff, 0xffbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fffff, 0xffc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffff, 0xffd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffff, 0xffffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffff, 0x4f3495cb, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x7fffff, 0xe73a5134, 0xe73a5134, 0x3000080}, +{0x3000000, 0x7fffff, 0x7c994e9e, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x7fffff, 0x6164bd6c, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x7fffff, 0x9503366, 0x9503366, 0x3000080}, +{0x3000000, 0x7fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0x7fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0x7fffff, 0x77f31e2f, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x7fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0x7fffff, 0x966320b, 0x966320b, 0x3000080}, +{0x3000000, 0x7fffff, 0xb26bddee, 0xb26bddee, 0x3000080}, +{0x3000000, 0x7fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0x7fffff, 0x317285d3, 0x317285d3, 0x3000080}, +{0x3000000, 0x7fffff, 0x3c9623b1, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x7fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x7fffff, 0x7b906a6c, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x800000, 0x0, 0x800000, 0x3000000}, +{0x3000000, 0x800000, 0x1, 0x800000, 0x3000080}, +{0x3000000, 0x800000, 0x76, 0x800000, 0x3000080}, +{0x3000000, 0x800000, 0x2b94, 0x800000, 0x3000080}, +{0x3000000, 0x800000, 0x636d24, 0x800000, 0x3000080}, +{0x3000000, 0x800000, 0x7fffff, 0x800000, 0x3000080}, +{0x3000000, 0x800000, 0x800000, 0x1000000, 0x3000000}, +{0x3000000, 0x800000, 0x800002, 0x1000001, 0x3000000}, +{0x3000000, 0x800000, 0x1398437, 0x1798437, 0x3000000}, +{0x3000000, 0x800000, 0xba98d27, 0xba98d29, 0x3000000}, +{0x3000000, 0x800000, 0xba98d7a, 0xba98d7c, 0x3000000}, +{0x3000000, 0x800000, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x800000, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x800000, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x800000, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x800000, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x800000, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x800000, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x800000, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x800000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x800000, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x800000, 0x80000000, 0x800000, 0x3000000}, +{0x3000000, 0x800000, 0x80000001, 0x800000, 0x3000080}, +{0x3000000, 0x800000, 0x80000076, 0x800000, 0x3000080}, +{0x3000000, 0x800000, 0x80002b94, 0x800000, 0x3000080}, +{0x3000000, 0x800000, 0x80636d24, 0x800000, 0x3000080}, +{0x3000000, 0x800000, 0x807fffff, 0x800000, 0x3000080}, +{0x3000000, 0x800000, 0x80800000, 0x0, 0x3000000}, +{0x3000000, 0x800000, 0x80800002, 0x0, 0x3000008}, +{0x3000000, 0x800000, 0x81398437, 0x80f3086e, 0x3000000}, +{0x3000000, 0x800000, 0x8ba98d27, 0x8ba98d25, 0x3000000}, +{0x3000000, 0x800000, 0x8ba98d7a, 0x8ba98d78, 0x3000000}, +{0x3000000, 0x800000, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x800000, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x800000, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x800000, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x800000, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x800000, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x800000, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x800000, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x800000, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x800000, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x800000, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x800000, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x800000, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x800000, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x800000, 0x9503366, 0x95033a6, 0x3000000}, +{0x3000000, 0x800000, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0x800000, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x800000, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x800000, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0x800000, 0x966320b, 0x966324b, 0x3000000}, +{0x3000000, 0x800000, 0xb26bddee, 0xb26bddee, 0x3000010}, +{0x3000000, 0x800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0x800000, 0x317285d3, 0x317285d3, 0x3000010}, +{0x3000000, 0x800000, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x800000, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x800000, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x800002, 0x0, 0x800002, 0x3000000}, +{0x3000000, 0x800002, 0x1, 0x800002, 0x3000080}, +{0x3000000, 0x800002, 0x76, 0x800002, 0x3000080}, +{0x3000000, 0x800002, 0x2b94, 0x800002, 0x3000080}, +{0x3000000, 0x800002, 0x636d24, 0x800002, 0x3000080}, +{0x3000000, 0x800002, 0x7fffff, 0x800002, 0x3000080}, +{0x3000000, 0x800002, 0x800000, 0x1000001, 0x3000000}, +{0x3000000, 0x800002, 0x800002, 0x1000002, 0x3000000}, +{0x3000000, 0x800002, 0x1398437, 0x1798438, 0x3000000}, +{0x3000000, 0x800002, 0xba98d27, 0xba98d29, 0x3000010}, +{0x3000000, 0x800002, 0xba98d7a, 0xba98d7c, 0x3000010}, +{0x3000000, 0x800002, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x800002, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x800002, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x800002, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x800002, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x800002, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x800002, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x800002, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x800002, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x800002, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x800002, 0x80000000, 0x800002, 0x3000000}, +{0x3000000, 0x800002, 0x80000001, 0x800002, 0x3000080}, +{0x3000000, 0x800002, 0x80000076, 0x800002, 0x3000080}, +{0x3000000, 0x800002, 0x80002b94, 0x800002, 0x3000080}, +{0x3000000, 0x800002, 0x80636d24, 0x800002, 0x3000080}, +{0x3000000, 0x800002, 0x807fffff, 0x800002, 0x3000080}, +{0x3000000, 0x800002, 0x80800000, 0x0, 0x3000008}, +{0x3000000, 0x800002, 0x80800002, 0x0, 0x3000000}, +{0x3000000, 0x800002, 0x81398437, 0x80f3086c, 0x3000000}, +{0x3000000, 0x800002, 0x8ba98d27, 0x8ba98d25, 0x3000010}, +{0x3000000, 0x800002, 0x8ba98d7a, 0x8ba98d78, 0x3000010}, +{0x3000000, 0x800002, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x800002, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x800002, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x800002, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x800002, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x800002, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x800002, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x800002, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x800002, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x800002, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x800002, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x800002, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x800002, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x800002, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x800002, 0x9503366, 0x95033a6, 0x3000010}, +{0x3000000, 0x800002, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0x800002, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x800002, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x800002, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0x800002, 0x966320b, 0x966324b, 0x3000010}, +{0x3000000, 0x800002, 0xb26bddee, 0xb26bddee, 0x3000010}, +{0x3000000, 0x800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0x800002, 0x317285d3, 0x317285d3, 0x3000010}, +{0x3000000, 0x800002, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x800002, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x800002, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x1398437, 0x0, 0x1398437, 0x3000000}, +{0x3000000, 0x1398437, 0x1, 0x1398437, 0x3000080}, +{0x3000000, 0x1398437, 0x76, 0x1398437, 0x3000080}, +{0x3000000, 0x1398437, 0x2b94, 0x1398437, 0x3000080}, +{0x3000000, 0x1398437, 0x636d24, 0x1398437, 0x3000080}, +{0x3000000, 0x1398437, 0x7fffff, 0x1398437, 0x3000080}, +{0x3000000, 0x1398437, 0x800000, 0x1798437, 0x3000000}, +{0x3000000, 0x1398437, 0x800002, 0x1798438, 0x3000000}, +{0x3000000, 0x1398437, 0x1398437, 0x1b98437, 0x3000000}, +{0x3000000, 0x1398437, 0xba98d27, 0xba98d2d, 0x3000010}, +{0x3000000, 0x1398437, 0xba98d7a, 0xba98d80, 0x3000010}, +{0x3000000, 0x1398437, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x1398437, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x1398437, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x1398437, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x1398437, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x1398437, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x1398437, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x1398437, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x1398437, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x1398437, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x1398437, 0x80000000, 0x1398437, 0x3000000}, +{0x3000000, 0x1398437, 0x80000001, 0x1398437, 0x3000080}, +{0x3000000, 0x1398437, 0x80000076, 0x1398437, 0x3000080}, +{0x3000000, 0x1398437, 0x80002b94, 0x1398437, 0x3000080}, +{0x3000000, 0x1398437, 0x80636d24, 0x1398437, 0x3000080}, +{0x3000000, 0x1398437, 0x807fffff, 0x1398437, 0x3000080}, +{0x3000000, 0x1398437, 0x80800000, 0xf3086e, 0x3000000}, +{0x3000000, 0x1398437, 0x80800002, 0xf3086c, 0x3000000}, +{0x3000000, 0x1398437, 0x81398437, 0x0, 0x3000000}, +{0x3000000, 0x1398437, 0x8ba98d27, 0x8ba98d21, 0x3000010}, +{0x3000000, 0x1398437, 0x8ba98d7a, 0x8ba98d74, 0x3000010}, +{0x3000000, 0x1398437, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x1398437, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x1398437, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x1398437, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x1398437, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x1398437, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x1398437, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x1398437, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x1398437, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x1398437, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x1398437, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x1398437, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x1398437, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x1398437, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x1398437, 0x9503366, 0x9503420, 0x3000010}, +{0x3000000, 0x1398437, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0x1398437, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x1398437, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x1398437, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0x1398437, 0x966320b, 0x96632c5, 0x3000010}, +{0x3000000, 0x1398437, 0xb26bddee, 0xb26bddee, 0x3000010}, +{0x3000000, 0x1398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0x1398437, 0x317285d3, 0x317285d3, 0x3000010}, +{0x3000000, 0x1398437, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x1398437, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x1398437, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0xba98d27, 0x0, 0xba98d27, 0x3000000}, +{0x3000000, 0xba98d27, 0x1, 0xba98d27, 0x3000080}, +{0x3000000, 0xba98d27, 0x76, 0xba98d27, 0x3000080}, +{0x3000000, 0xba98d27, 0x2b94, 0xba98d27, 0x3000080}, +{0x3000000, 0xba98d27, 0x636d24, 0xba98d27, 0x3000080}, +{0x3000000, 0xba98d27, 0x7fffff, 0xba98d27, 0x3000080}, +{0x3000000, 0xba98d27, 0x800000, 0xba98d29, 0x3000000}, +{0x3000000, 0xba98d27, 0x800002, 0xba98d29, 0x3000010}, +{0x3000000, 0xba98d27, 0x1398437, 0xba98d2d, 0x3000010}, +{0x3000000, 0xba98d27, 0xba98d27, 0xc298d27, 0x3000000}, +{0x3000000, 0xba98d27, 0xba98d7a, 0xc298d50, 0x3000010}, +{0x3000000, 0xba98d27, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0xba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0xba98d27, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0xba98d27, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0xba98d27, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xba98d27, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xba98d27, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xba98d27, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xba98d27, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xba98d27, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xba98d27, 0x80000000, 0xba98d27, 0x3000000}, +{0x3000000, 0xba98d27, 0x80000001, 0xba98d27, 0x3000080}, +{0x3000000, 0xba98d27, 0x80000076, 0xba98d27, 0x3000080}, +{0x3000000, 0xba98d27, 0x80002b94, 0xba98d27, 0x3000080}, +{0x3000000, 0xba98d27, 0x80636d24, 0xba98d27, 0x3000080}, +{0x3000000, 0xba98d27, 0x807fffff, 0xba98d27, 0x3000080}, +{0x3000000, 0xba98d27, 0x80800000, 0xba98d25, 0x3000000}, +{0x3000000, 0xba98d27, 0x80800002, 0xba98d25, 0x3000010}, +{0x3000000, 0xba98d27, 0x81398437, 0xba98d21, 0x3000010}, +{0x3000000, 0xba98d27, 0x8ba98d27, 0x0, 0x3000000}, +{0x3000000, 0xba98d27, 0x8ba98d7a, 0x83260000, 0x3000000}, +{0x3000000, 0xba98d27, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0xba98d27, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xba98d27, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0xba98d27, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0xba98d27, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xba98d27, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xba98d27, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xba98d27, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xba98d27, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xba98d27, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xba98d27, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0xba98d27, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0xba98d27, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0xba98d27, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0xba98d27, 0x9503366, 0xbb00ec2, 0x3000010}, +{0x3000000, 0xba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xba98d27, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0xba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xba98d27, 0x966320b, 0xbb0beb7, 0x3000010}, +{0x3000000, 0xba98d27, 0xb26bddee, 0xb26bddee, 0x3000010}, +{0x3000000, 0xba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xba98d27, 0x317285d3, 0x317285d3, 0x3000010}, +{0x3000000, 0xba98d27, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0xba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0xba98d27, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0xba98d7a, 0x0, 0xba98d7a, 0x3000000}, +{0x3000000, 0xba98d7a, 0x1, 0xba98d7a, 0x3000080}, +{0x3000000, 0xba98d7a, 0x76, 0xba98d7a, 0x3000080}, +{0x3000000, 0xba98d7a, 0x2b94, 0xba98d7a, 0x3000080}, +{0x3000000, 0xba98d7a, 0x636d24, 0xba98d7a, 0x3000080}, +{0x3000000, 0xba98d7a, 0x7fffff, 0xba98d7a, 0x3000080}, +{0x3000000, 0xba98d7a, 0x800000, 0xba98d7c, 0x3000000}, +{0x3000000, 0xba98d7a, 0x800002, 0xba98d7c, 0x3000010}, +{0x3000000, 0xba98d7a, 0x1398437, 0xba98d80, 0x3000010}, +{0x3000000, 0xba98d7a, 0xba98d27, 0xc298d50, 0x3000010}, +{0x3000000, 0xba98d7a, 0xba98d7a, 0xc298d7a, 0x3000000}, +{0x3000000, 0xba98d7a, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0xba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0xba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0xba98d7a, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0xba98d7a, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xba98d7a, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xba98d7a, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xba98d7a, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xba98d7a, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xba98d7a, 0x80000000, 0xba98d7a, 0x3000000}, +{0x3000000, 0xba98d7a, 0x80000001, 0xba98d7a, 0x3000080}, +{0x3000000, 0xba98d7a, 0x80000076, 0xba98d7a, 0x3000080}, +{0x3000000, 0xba98d7a, 0x80002b94, 0xba98d7a, 0x3000080}, +{0x3000000, 0xba98d7a, 0x80636d24, 0xba98d7a, 0x3000080}, +{0x3000000, 0xba98d7a, 0x807fffff, 0xba98d7a, 0x3000080}, +{0x3000000, 0xba98d7a, 0x80800000, 0xba98d78, 0x3000000}, +{0x3000000, 0xba98d7a, 0x80800002, 0xba98d78, 0x3000010}, +{0x3000000, 0xba98d7a, 0x81398437, 0xba98d74, 0x3000010}, +{0x3000000, 0xba98d7a, 0x8ba98d27, 0x3260000, 0x3000000}, +{0x3000000, 0xba98d7a, 0x8ba98d7a, 0x0, 0x3000000}, +{0x3000000, 0xba98d7a, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0xba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xba98d7a, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0xba98d7a, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0xba98d7a, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xba98d7a, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xba98d7a, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xba98d7a, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xba98d7a, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xba98d7a, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0xba98d7a, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0xba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0xba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0xba98d7a, 0x9503366, 0xbb00f15, 0x3000010}, +{0x3000000, 0xba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0xba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xba98d7a, 0x966320b, 0xbb0bf0a, 0x3000010}, +{0x3000000, 0xba98d7a, 0xb26bddee, 0xb26bddee, 0x3000010}, +{0x3000000, 0xba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xba98d7a, 0x317285d3, 0x317285d3, 0x3000010}, +{0x3000000, 0xba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0xba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0xba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x751f853a, 0x0, 0x751f853a, 0x3000000}, +{0x3000000, 0x751f853a, 0x1, 0x751f853a, 0x3000080}, +{0x3000000, 0x751f853a, 0x76, 0x751f853a, 0x3000080}, +{0x3000000, 0x751f853a, 0x2b94, 0x751f853a, 0x3000080}, +{0x3000000, 0x751f853a, 0x636d24, 0x751f853a, 0x3000080}, +{0x3000000, 0x751f853a, 0x7fffff, 0x751f853a, 0x3000080}, +{0x3000000, 0x751f853a, 0x800000, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x800002, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x1398437, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0xba98d27, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0xba98d7a, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x751f853a, 0x759f853a, 0x3000000}, +{0x3000000, 0x751f853a, 0x7f7ffff0, 0x7f7ffffa, 0x3000010}, +{0x3000000, 0x751f853a, 0x7f7fffff, 0x7f800000, 0x3000014}, +{0x3000000, 0x751f853a, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x751f853a, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x751f853a, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x751f853a, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x751f853a, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x751f853a, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x751f853a, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x751f853a, 0x80000000, 0x751f853a, 0x3000000}, +{0x3000000, 0x751f853a, 0x80000001, 0x751f853a, 0x3000080}, +{0x3000000, 0x751f853a, 0x80000076, 0x751f853a, 0x3000080}, +{0x3000000, 0x751f853a, 0x80002b94, 0x751f853a, 0x3000080}, +{0x3000000, 0x751f853a, 0x80636d24, 0x751f853a, 0x3000080}, +{0x3000000, 0x751f853a, 0x807fffff, 0x751f853a, 0x3000080}, +{0x3000000, 0x751f853a, 0x80800000, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x80800002, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x81398437, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x8ba98d27, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x8ba98d7a, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0xf51f853a, 0x0, 0x3000000}, +{0x3000000, 0x751f853a, 0xff7ffff0, 0xff7fffe6, 0x3000010}, +{0x3000000, 0x751f853a, 0xff7fffff, 0xff7ffff5, 0x3000010}, +{0x3000000, 0x751f853a, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x751f853a, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x751f853a, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x751f853a, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x751f853a, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x751f853a, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x751f853a, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x751f853a, 0x4f3495cb, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0xe73a5134, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x7c994e9e, 0x7c994fdd, 0x3000010}, +{0x3000000, 0x751f853a, 0x6164bd6c, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x9503366, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0xbf5a97c9, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0xe6ff1a14, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x77f31e2f, 0x77f81a59, 0x3000010}, +{0x3000000, 0x751f853a, 0xaab4d7d8, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x966320b, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0xb26bddee, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0xb5c8e5d3, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x317285d3, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x3c9623b1, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x51fd2c7c, 0x751f853a, 0x3000010}, +{0x3000000, 0x751f853a, 0x7b906a6c, 0x7b906f68, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x0, 0x7f7ffff0, 0x3000000}, +{0x3000000, 0x7f7ffff0, 0x1, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x7f7ffff0, 0x76, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x7f7ffff0, 0x2b94, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x7f7ffff0, 0x636d24, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x7f7ffff0, 0x7fffff, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x7f7ffff0, 0x800000, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x800002, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x1398437, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0xba98d27, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0xba98d7a, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x751f853a, 0x7f7ffffa, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x7f7ffff0, 0x7f800000, 0x3000014}, +{0x3000000, 0x7f7ffff0, 0x7f7fffff, 0x7f800000, 0x3000014}, +{0x3000000, 0x7f7ffff0, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f7ffff0, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f7ffff0, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f7ffff0, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f7ffff0, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f7ffff0, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f7ffff0, 0x80000000, 0x7f7ffff0, 0x3000000}, +{0x3000000, 0x7f7ffff0, 0x80000001, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x7f7ffff0, 0x80000076, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x7f7ffff0, 0x80002b94, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x7f7ffff0, 0x80636d24, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x7f7ffff0, 0x807fffff, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x7f7ffff0, 0x80800000, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x80800002, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x81398437, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x8ba98d27, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x8ba98d7a, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0xf51f853a, 0x7f7fffe6, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0xff7ffff0, 0x0, 0x3000000}, +{0x3000000, 0x7f7ffff0, 0xff7fffff, 0xf5700000, 0x3000000}, +{0x3000000, 0x7f7ffff0, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x7f7ffff0, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f7ffff0, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f7ffff0, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f7ffff0, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f7ffff0, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f7ffff0, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f7ffff0, 0x4f3495cb, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0xe73a5134, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x7c994e9e, 0x7f800000, 0x3000014}, +{0x3000000, 0x7f7ffff0, 0x6164bd6c, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x9503366, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0xbf5a97c9, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0xe6ff1a14, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x77f31e2f, 0x7f800000, 0x3000014}, +{0x3000000, 0x7f7ffff0, 0xaab4d7d8, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x966320b, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0xb26bddee, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0xb5c8e5d3, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x317285d3, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x3c9623b1, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x51fd2c7c, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x7f7ffff0, 0x7b906a6c, 0x7f800000, 0x3000014}, +{0x3000000, 0x7f7fffff, 0x0, 0x7f7fffff, 0x3000000}, +{0x3000000, 0x7f7fffff, 0x1, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x7f7fffff, 0x76, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x7f7fffff, 0x2b94, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x7f7fffff, 0x636d24, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x7f7fffff, 0x7fffff, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x7f7fffff, 0x800000, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x800002, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x1398437, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0xba98d27, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0xba98d7a, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x751f853a, 0x7f800000, 0x3000014}, +{0x3000000, 0x7f7fffff, 0x7f7ffff0, 0x7f800000, 0x3000014}, +{0x3000000, 0x7f7fffff, 0x7f7fffff, 0x7f800000, 0x3000014}, +{0x3000000, 0x7f7fffff, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f7fffff, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f7fffff, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f7fffff, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f7fffff, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f7fffff, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f7fffff, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f7fffff, 0x80000000, 0x7f7fffff, 0x3000000}, +{0x3000000, 0x7f7fffff, 0x80000001, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x7f7fffff, 0x80000076, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x7f7fffff, 0x80002b94, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x7f7fffff, 0x80636d24, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x7f7fffff, 0x807fffff, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x7f7fffff, 0x80800000, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x80800002, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x81398437, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x8ba98d27, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x8ba98d7a, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0xf51f853a, 0x7f7ffff5, 0x3000010}, +{0x3000000, 0x7f7fffff, 0xff7ffff0, 0x75700000, 0x3000000}, +{0x3000000, 0x7f7fffff, 0xff7fffff, 0x0, 0x3000000}, +{0x3000000, 0x7f7fffff, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x7f7fffff, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f7fffff, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f7fffff, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f7fffff, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f7fffff, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f7fffff, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f7fffff, 0x4f3495cb, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0xe73a5134, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x7c994e9e, 0x7f800000, 0x3000014}, +{0x3000000, 0x7f7fffff, 0x6164bd6c, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x9503366, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0xbf5a97c9, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0xe6ff1a14, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x77f31e2f, 0x7f800000, 0x3000014}, +{0x3000000, 0x7f7fffff, 0xaab4d7d8, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x966320b, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0xb26bddee, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0xb5c8e5d3, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x317285d3, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x3c9623b1, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x51fd2c7c, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x7f7fffff, 0x7b906a6c, 0x7f800000, 0x3000014}, +{0x3000000, 0x7f800000, 0x0, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x1, 0x7f800000, 0x3000080}, +{0x3000000, 0x7f800000, 0x76, 0x7f800000, 0x3000080}, +{0x3000000, 0x7f800000, 0x2b94, 0x7f800000, 0x3000080}, +{0x3000000, 0x7f800000, 0x636d24, 0x7f800000, 0x3000080}, +{0x3000000, 0x7f800000, 0x7fffff, 0x7f800000, 0x3000080}, +{0x3000000, 0x7f800000, 0x800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x800002, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x1398437, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0xba98d27, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0xba98d7a, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x751f853a, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x7f7ffff0, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x7f7fffff, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800000, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800000, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800000, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f800000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f800000, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f800000, 0x80000000, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x80000001, 0x7f800000, 0x3000080}, +{0x3000000, 0x7f800000, 0x80000076, 0x7f800000, 0x3000080}, +{0x3000000, 0x7f800000, 0x80002b94, 0x7f800000, 0x3000080}, +{0x3000000, 0x7f800000, 0x80636d24, 0x7f800000, 0x3000080}, +{0x3000000, 0x7f800000, 0x807fffff, 0x7f800000, 0x3000080}, +{0x3000000, 0x7f800000, 0x80800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x80800002, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x81398437, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x8ba98d27, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x8ba98d7a, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0xf51f853a, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0xff7ffff0, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0xff7fffff, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0xff800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800000, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800000, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800000, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800000, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f800000, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f800000, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7f800000, 0x4f3495cb, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0xe73a5134, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x7c994e9e, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x6164bd6c, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x9503366, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0xbf5a97c9, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0xe6ff1a14, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x77f31e2f, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0xaab4d7d8, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x966320b, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0xb26bddee, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0xb5c8e5d3, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x317285d3, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x3c9623b1, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x51fd2c7c, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800000, 0x7b906a6c, 0x7f800000, 0x3000000}, +{0x3000000, 0x7f800001, 0x0, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x1, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f800001, 0x76, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f800001, 0x2b94, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f800001, 0x636d24, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f800001, 0x7fffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f800001, 0x800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x800002, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x1398437, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xba98d27, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xba98d7a, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x751f853a, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x7f7ffff0, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x7f7fffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x7f800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x7fc00000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x7fd9ba98, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x7fffffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x80000000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x80000001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f800001, 0x80000076, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f800001, 0x80002b94, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f800001, 0x80636d24, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f800001, 0x807fffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f800001, 0x80800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x80800002, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x81398437, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x8ba98d27, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x8ba98d7a, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xf51f853a, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xff7ffff0, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xff7fffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xff800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xffc00000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xffd9ba98, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xffffffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x4f3495cb, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xe73a5134, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x7c994e9e, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x6164bd6c, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x9503366, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xbf5a97c9, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xe6ff1a14, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x77f31e2f, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xaab4d7d8, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x966320b, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xb26bddee, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0xb5c8e5d3, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x317285d3, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x3c9623b1, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x51fd2c7c, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f800001, 0x7b906a6c, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x0, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x1, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f984a37, 0x76, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f984a37, 0x2b94, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f984a37, 0x636d24, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f984a37, 0x7fffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f984a37, 0x800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x800002, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x1398437, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xba98d27, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xba98d7a, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x751f853a, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x7f7ffff0, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x7f7fffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x7f800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x7fc00000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x7fd9ba98, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x7fffffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x80000000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x80000001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f984a37, 0x80000076, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f984a37, 0x80002b94, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f984a37, 0x80636d24, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f984a37, 0x807fffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7f984a37, 0x80800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x80800002, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x81398437, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x8ba98d27, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x8ba98d7a, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xf51f853a, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xff7ffff0, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xff7fffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xff800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xffc00000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xffd9ba98, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xffffffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x4f3495cb, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xe73a5134, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x7c994e9e, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x6164bd6c, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x9503366, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xbf5a97c9, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xe6ff1a14, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x77f31e2f, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xaab4d7d8, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x966320b, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xb26bddee, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0xb5c8e5d3, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x317285d3, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x3c9623b1, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x51fd2c7c, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7f984a37, 0x7b906a6c, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x0, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x1, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fbfffff, 0x76, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fbfffff, 0x2b94, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fbfffff, 0x636d24, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fbfffff, 0x7fffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fbfffff, 0x800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x800002, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x1398437, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xba98d27, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xba98d7a, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x751f853a, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x7f7ffff0, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x7f7fffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x7f800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x7fc00000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x7fd9ba98, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x7fffffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x80000000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x80000001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fbfffff, 0x80000076, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fbfffff, 0x80002b94, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fbfffff, 0x80636d24, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fbfffff, 0x807fffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x7fbfffff, 0x80800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x80800002, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x81398437, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x8ba98d27, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x8ba98d7a, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xf51f853a, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xff7ffff0, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xff7fffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xff800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xffc00000, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xffd9ba98, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xffffffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x4f3495cb, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xe73a5134, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x7c994e9e, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x6164bd6c, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x9503366, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xbf5a97c9, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xe6ff1a14, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x77f31e2f, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xaab4d7d8, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x966320b, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xb26bddee, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x317285d3, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x3c9623b1, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x51fd2c7c, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fbfffff, 0x7b906a6c, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fc00000, 0x0, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x1, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fc00000, 0x76, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fc00000, 0x2b94, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fc00000, 0x636d24, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fc00000, 0x7fffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fc00000, 0x800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x800002, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x1398437, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xba98d27, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xba98d7a, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x751f853a, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x7f7ffff0, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x7f7fffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x7f800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fc00000, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fc00000, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fc00000, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x80000000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x80000001, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fc00000, 0x80000076, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fc00000, 0x80002b94, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fc00000, 0x80636d24, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fc00000, 0x807fffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fc00000, 0x80800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x80800002, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x81398437, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x8ba98d27, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x8ba98d7a, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xf51f853a, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xff7ffff0, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xff7fffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xff800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fc00000, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fc00000, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fc00000, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x4f3495cb, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xe73a5134, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x7c994e9e, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x6164bd6c, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x9503366, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xbf5a97c9, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xe6ff1a14, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x77f31e2f, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xaab4d7d8, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x966320b, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xb26bddee, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0xb5c8e5d3, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x317285d3, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x3c9623b1, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x51fd2c7c, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fc00000, 0x7b906a6c, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x0, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x1, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fd9ba98, 0x76, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fd9ba98, 0x2b94, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fd9ba98, 0x636d24, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fd9ba98, 0x7fffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fd9ba98, 0x800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x800002, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x1398437, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xba98d27, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xba98d7a, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x751f853a, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x7f7fffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x7f800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fd9ba98, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fd9ba98, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fd9ba98, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x80000000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x80000001, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fd9ba98, 0x80000076, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fd9ba98, 0x80002b94, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fd9ba98, 0x80636d24, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fd9ba98, 0x807fffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fd9ba98, 0x80800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x80800002, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x81398437, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x8ba98d27, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xf51f853a, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xff7ffff0, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xff7fffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xff800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fd9ba98, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fd9ba98, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fd9ba98, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x4f3495cb, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xe73a5134, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x7c994e9e, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x6164bd6c, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x9503366, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x77f31e2f, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x966320b, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xb26bddee, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x317285d3, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x3c9623b1, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fd9ba98, 0x7b906a6c, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x0, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x1, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffffff, 0x76, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffffff, 0x2b94, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffffff, 0x636d24, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffffff, 0x7fffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffffff, 0x800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x800002, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x1398437, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xba98d27, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xba98d7a, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x751f853a, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x7f7ffff0, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x7f7fffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x7f800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fffffff, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fffffff, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fffffff, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x80000000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x80000001, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffffff, 0x80000076, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffffff, 0x80002b94, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffffff, 0x80636d24, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffffff, 0x807fffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x7fffffff, 0x80800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x80800002, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x81398437, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x8ba98d27, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x8ba98d7a, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xf51f853a, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xff7ffff0, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xff7fffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xff800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fffffff, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fffffff, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7fffffff, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x4f3495cb, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xe73a5134, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x7c994e9e, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x6164bd6c, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x9503366, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xbf5a97c9, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xe6ff1a14, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x77f31e2f, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xaab4d7d8, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x966320b, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xb26bddee, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0xb5c8e5d3, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x317285d3, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x3c9623b1, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x51fd2c7c, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7fffffff, 0x7b906a6c, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80000000, 0x0, 0x0, 0x3000000}, +{0x3000000, 0x80000000, 0x1, 0x0, 0x3000080}, +{0x3000000, 0x80000000, 0x76, 0x0, 0x3000080}, +{0x3000000, 0x80000000, 0x2b94, 0x0, 0x3000080}, +{0x3000000, 0x80000000, 0x636d24, 0x0, 0x3000080}, +{0x3000000, 0x80000000, 0x7fffff, 0x0, 0x3000080}, +{0x3000000, 0x80000000, 0x800000, 0x800000, 0x3000000}, +{0x3000000, 0x80000000, 0x800002, 0x800002, 0x3000000}, +{0x3000000, 0x80000000, 0x1398437, 0x1398437, 0x3000000}, +{0x3000000, 0x80000000, 0xba98d27, 0xba98d27, 0x3000000}, +{0x3000000, 0x80000000, 0xba98d7a, 0xba98d7a, 0x3000000}, +{0x3000000, 0x80000000, 0x751f853a, 0x751f853a, 0x3000000}, +{0x3000000, 0x80000000, 0x7f7ffff0, 0x7f7ffff0, 0x3000000}, +{0x3000000, 0x80000000, 0x7f7fffff, 0x7f7fffff, 0x3000000}, +{0x3000000, 0x80000000, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x80000000, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80000000, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80000000, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80000000, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80000000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80000000, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80000000, 0x80000000, 0x80000000, 0x3000000}, +{0x3000000, 0x80000000, 0x80000001, 0x0, 0x3000080}, +{0x3000000, 0x80000000, 0x80000076, 0x0, 0x3000080}, +{0x3000000, 0x80000000, 0x80002b94, 0x0, 0x3000080}, +{0x3000000, 0x80000000, 0x80636d24, 0x0, 0x3000080}, +{0x3000000, 0x80000000, 0x807fffff, 0x0, 0x3000080}, +{0x3000000, 0x80000000, 0x80800000, 0x80800000, 0x3000000}, +{0x3000000, 0x80000000, 0x80800002, 0x80800002, 0x3000000}, +{0x3000000, 0x80000000, 0x81398437, 0x81398437, 0x3000000}, +{0x3000000, 0x80000000, 0x8ba98d27, 0x8ba98d27, 0x3000000}, +{0x3000000, 0x80000000, 0x8ba98d7a, 0x8ba98d7a, 0x3000000}, +{0x3000000, 0x80000000, 0xf51f853a, 0xf51f853a, 0x3000000}, +{0x3000000, 0x80000000, 0xff7ffff0, 0xff7ffff0, 0x3000000}, +{0x3000000, 0x80000000, 0xff7fffff, 0xff7fffff, 0x3000000}, +{0x3000000, 0x80000000, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x80000000, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80000000, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80000000, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80000000, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80000000, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80000000, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80000000, 0x4f3495cb, 0x4f3495cb, 0x3000000}, +{0x3000000, 0x80000000, 0xe73a5134, 0xe73a5134, 0x3000000}, +{0x3000000, 0x80000000, 0x7c994e9e, 0x7c994e9e, 0x3000000}, +{0x3000000, 0x80000000, 0x6164bd6c, 0x6164bd6c, 0x3000000}, +{0x3000000, 0x80000000, 0x9503366, 0x9503366, 0x3000000}, +{0x3000000, 0x80000000, 0xbf5a97c9, 0xbf5a97c9, 0x3000000}, +{0x3000000, 0x80000000, 0xe6ff1a14, 0xe6ff1a14, 0x3000000}, +{0x3000000, 0x80000000, 0x77f31e2f, 0x77f31e2f, 0x3000000}, +{0x3000000, 0x80000000, 0xaab4d7d8, 0xaab4d7d8, 0x3000000}, +{0x3000000, 0x80000000, 0x966320b, 0x966320b, 0x3000000}, +{0x3000000, 0x80000000, 0xb26bddee, 0xb26bddee, 0x3000000}, +{0x3000000, 0x80000000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000000}, +{0x3000000, 0x80000000, 0x317285d3, 0x317285d3, 0x3000000}, +{0x3000000, 0x80000000, 0x3c9623b1, 0x3c9623b1, 0x3000000}, +{0x3000000, 0x80000000, 0x51fd2c7c, 0x51fd2c7c, 0x3000000}, +{0x3000000, 0x80000000, 0x7b906a6c, 0x7b906a6c, 0x3000000}, +{0x3000000, 0x80000001, 0x0, 0x0, 0x3000080}, +{0x3000000, 0x80000001, 0x1, 0x0, 0x3000080}, +{0x3000000, 0x80000001, 0x76, 0x0, 0x3000080}, +{0x3000000, 0x80000001, 0x2b94, 0x0, 0x3000080}, +{0x3000000, 0x80000001, 0x636d24, 0x0, 0x3000080}, +{0x3000000, 0x80000001, 0x7fffff, 0x0, 0x3000080}, +{0x3000000, 0x80000001, 0x800000, 0x800000, 0x3000080}, +{0x3000000, 0x80000001, 0x800002, 0x800002, 0x3000080}, +{0x3000000, 0x80000001, 0x1398437, 0x1398437, 0x3000080}, +{0x3000000, 0x80000001, 0xba98d27, 0xba98d27, 0x3000080}, +{0x3000000, 0x80000001, 0xba98d7a, 0xba98d7a, 0x3000080}, +{0x3000000, 0x80000001, 0x751f853a, 0x751f853a, 0x3000080}, +{0x3000000, 0x80000001, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x80000001, 0x7f7fffff, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x80000001, 0x7f800000, 0x7f800000, 0x3000080}, +{0x3000000, 0x80000001, 0x7f800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80000001, 0x7f984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80000001, 0x7fbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80000001, 0x7fc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80000001, 0x7fd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80000001, 0x7fffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80000001, 0x80000000, 0x0, 0x3000080}, +{0x3000000, 0x80000001, 0x80000001, 0x0, 0x3000080}, +{0x3000000, 0x80000001, 0x80000076, 0x0, 0x3000080}, +{0x3000000, 0x80000001, 0x80002b94, 0x0, 0x3000080}, +{0x3000000, 0x80000001, 0x80636d24, 0x0, 0x3000080}, +{0x3000000, 0x80000001, 0x807fffff, 0x0, 0x3000080}, +{0x3000000, 0x80000001, 0x80800000, 0x80800000, 0x3000080}, +{0x3000000, 0x80000001, 0x80800002, 0x80800002, 0x3000080}, +{0x3000000, 0x80000001, 0x81398437, 0x81398437, 0x3000080}, +{0x3000000, 0x80000001, 0x8ba98d27, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x80000001, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x80000001, 0xf51f853a, 0xf51f853a, 0x3000080}, +{0x3000000, 0x80000001, 0xff7ffff0, 0xff7ffff0, 0x3000080}, +{0x3000000, 0x80000001, 0xff7fffff, 0xff7fffff, 0x3000080}, +{0x3000000, 0x80000001, 0xff800000, 0xff800000, 0x3000080}, +{0x3000000, 0x80000001, 0xff800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80000001, 0xff984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80000001, 0xffbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80000001, 0xffc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80000001, 0xffd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80000001, 0xffffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80000001, 0x4f3495cb, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x80000001, 0xe73a5134, 0xe73a5134, 0x3000080}, +{0x3000000, 0x80000001, 0x7c994e9e, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x80000001, 0x6164bd6c, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x80000001, 0x9503366, 0x9503366, 0x3000080}, +{0x3000000, 0x80000001, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0x80000001, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0x80000001, 0x77f31e2f, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x80000001, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0x80000001, 0x966320b, 0x966320b, 0x3000080}, +{0x3000000, 0x80000001, 0xb26bddee, 0xb26bddee, 0x3000080}, +{0x3000000, 0x80000001, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0x80000001, 0x317285d3, 0x317285d3, 0x3000080}, +{0x3000000, 0x80000001, 0x3c9623b1, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x80000001, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x80000001, 0x7b906a6c, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x80000076, 0x0, 0x0, 0x3000080}, +{0x3000000, 0x80000076, 0x1, 0x0, 0x3000080}, +{0x3000000, 0x80000076, 0x76, 0x0, 0x3000080}, +{0x3000000, 0x80000076, 0x2b94, 0x0, 0x3000080}, +{0x3000000, 0x80000076, 0x636d24, 0x0, 0x3000080}, +{0x3000000, 0x80000076, 0x7fffff, 0x0, 0x3000080}, +{0x3000000, 0x80000076, 0x800000, 0x800000, 0x3000080}, +{0x3000000, 0x80000076, 0x800002, 0x800002, 0x3000080}, +{0x3000000, 0x80000076, 0x1398437, 0x1398437, 0x3000080}, +{0x3000000, 0x80000076, 0xba98d27, 0xba98d27, 0x3000080}, +{0x3000000, 0x80000076, 0xba98d7a, 0xba98d7a, 0x3000080}, +{0x3000000, 0x80000076, 0x751f853a, 0x751f853a, 0x3000080}, +{0x3000000, 0x80000076, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x80000076, 0x7f7fffff, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x80000076, 0x7f800000, 0x7f800000, 0x3000080}, +{0x3000000, 0x80000076, 0x7f800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80000076, 0x7f984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80000076, 0x7fbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80000076, 0x7fc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80000076, 0x7fd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80000076, 0x7fffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80000076, 0x80000000, 0x0, 0x3000080}, +{0x3000000, 0x80000076, 0x80000001, 0x0, 0x3000080}, +{0x3000000, 0x80000076, 0x80000076, 0x0, 0x3000080}, +{0x3000000, 0x80000076, 0x80002b94, 0x0, 0x3000080}, +{0x3000000, 0x80000076, 0x80636d24, 0x0, 0x3000080}, +{0x3000000, 0x80000076, 0x807fffff, 0x0, 0x3000080}, +{0x3000000, 0x80000076, 0x80800000, 0x80800000, 0x3000080}, +{0x3000000, 0x80000076, 0x80800002, 0x80800002, 0x3000080}, +{0x3000000, 0x80000076, 0x81398437, 0x81398437, 0x3000080}, +{0x3000000, 0x80000076, 0x8ba98d27, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x80000076, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x80000076, 0xf51f853a, 0xf51f853a, 0x3000080}, +{0x3000000, 0x80000076, 0xff7ffff0, 0xff7ffff0, 0x3000080}, +{0x3000000, 0x80000076, 0xff7fffff, 0xff7fffff, 0x3000080}, +{0x3000000, 0x80000076, 0xff800000, 0xff800000, 0x3000080}, +{0x3000000, 0x80000076, 0xff800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80000076, 0xff984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80000076, 0xffbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80000076, 0xffc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80000076, 0xffd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80000076, 0xffffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80000076, 0x4f3495cb, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x80000076, 0xe73a5134, 0xe73a5134, 0x3000080}, +{0x3000000, 0x80000076, 0x7c994e9e, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x80000076, 0x6164bd6c, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x80000076, 0x9503366, 0x9503366, 0x3000080}, +{0x3000000, 0x80000076, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0x80000076, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0x80000076, 0x77f31e2f, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x80000076, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0x80000076, 0x966320b, 0x966320b, 0x3000080}, +{0x3000000, 0x80000076, 0xb26bddee, 0xb26bddee, 0x3000080}, +{0x3000000, 0x80000076, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0x80000076, 0x317285d3, 0x317285d3, 0x3000080}, +{0x3000000, 0x80000076, 0x3c9623b1, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x80000076, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x80000076, 0x7b906a6c, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x80002b94, 0x0, 0x0, 0x3000080}, +{0x3000000, 0x80002b94, 0x1, 0x0, 0x3000080}, +{0x3000000, 0x80002b94, 0x76, 0x0, 0x3000080}, +{0x3000000, 0x80002b94, 0x2b94, 0x0, 0x3000080}, +{0x3000000, 0x80002b94, 0x636d24, 0x0, 0x3000080}, +{0x3000000, 0x80002b94, 0x7fffff, 0x0, 0x3000080}, +{0x3000000, 0x80002b94, 0x800000, 0x800000, 0x3000080}, +{0x3000000, 0x80002b94, 0x800002, 0x800002, 0x3000080}, +{0x3000000, 0x80002b94, 0x1398437, 0x1398437, 0x3000080}, +{0x3000000, 0x80002b94, 0xba98d27, 0xba98d27, 0x3000080}, +{0x3000000, 0x80002b94, 0xba98d7a, 0xba98d7a, 0x3000080}, +{0x3000000, 0x80002b94, 0x751f853a, 0x751f853a, 0x3000080}, +{0x3000000, 0x80002b94, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x80002b94, 0x7f7fffff, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x80002b94, 0x7f800000, 0x7f800000, 0x3000080}, +{0x3000000, 0x80002b94, 0x7f800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80002b94, 0x7f984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80002b94, 0x7fbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80002b94, 0x7fc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80002b94, 0x7fd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80002b94, 0x7fffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80002b94, 0x80000000, 0x0, 0x3000080}, +{0x3000000, 0x80002b94, 0x80000001, 0x0, 0x3000080}, +{0x3000000, 0x80002b94, 0x80000076, 0x0, 0x3000080}, +{0x3000000, 0x80002b94, 0x80002b94, 0x0, 0x3000080}, +{0x3000000, 0x80002b94, 0x80636d24, 0x0, 0x3000080}, +{0x3000000, 0x80002b94, 0x807fffff, 0x0, 0x3000080}, +{0x3000000, 0x80002b94, 0x80800000, 0x80800000, 0x3000080}, +{0x3000000, 0x80002b94, 0x80800002, 0x80800002, 0x3000080}, +{0x3000000, 0x80002b94, 0x81398437, 0x81398437, 0x3000080}, +{0x3000000, 0x80002b94, 0x8ba98d27, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x80002b94, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x80002b94, 0xf51f853a, 0xf51f853a, 0x3000080}, +{0x3000000, 0x80002b94, 0xff7ffff0, 0xff7ffff0, 0x3000080}, +{0x3000000, 0x80002b94, 0xff7fffff, 0xff7fffff, 0x3000080}, +{0x3000000, 0x80002b94, 0xff800000, 0xff800000, 0x3000080}, +{0x3000000, 0x80002b94, 0xff800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80002b94, 0xff984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80002b94, 0xffbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80002b94, 0xffc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80002b94, 0xffd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80002b94, 0xffffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80002b94, 0x4f3495cb, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x80002b94, 0xe73a5134, 0xe73a5134, 0x3000080}, +{0x3000000, 0x80002b94, 0x7c994e9e, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x80002b94, 0x6164bd6c, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x80002b94, 0x9503366, 0x9503366, 0x3000080}, +{0x3000000, 0x80002b94, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0x80002b94, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0x80002b94, 0x77f31e2f, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x80002b94, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0x80002b94, 0x966320b, 0x966320b, 0x3000080}, +{0x3000000, 0x80002b94, 0xb26bddee, 0xb26bddee, 0x3000080}, +{0x3000000, 0x80002b94, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0x80002b94, 0x317285d3, 0x317285d3, 0x3000080}, +{0x3000000, 0x80002b94, 0x3c9623b1, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x80002b94, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x80002b94, 0x7b906a6c, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x80636d24, 0x0, 0x0, 0x3000080}, +{0x3000000, 0x80636d24, 0x1, 0x0, 0x3000080}, +{0x3000000, 0x80636d24, 0x76, 0x0, 0x3000080}, +{0x3000000, 0x80636d24, 0x2b94, 0x0, 0x3000080}, +{0x3000000, 0x80636d24, 0x636d24, 0x0, 0x3000080}, +{0x3000000, 0x80636d24, 0x7fffff, 0x0, 0x3000080}, +{0x3000000, 0x80636d24, 0x800000, 0x800000, 0x3000080}, +{0x3000000, 0x80636d24, 0x800002, 0x800002, 0x3000080}, +{0x3000000, 0x80636d24, 0x1398437, 0x1398437, 0x3000080}, +{0x3000000, 0x80636d24, 0xba98d27, 0xba98d27, 0x3000080}, +{0x3000000, 0x80636d24, 0xba98d7a, 0xba98d7a, 0x3000080}, +{0x3000000, 0x80636d24, 0x751f853a, 0x751f853a, 0x3000080}, +{0x3000000, 0x80636d24, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x80636d24, 0x7f7fffff, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x80636d24, 0x7f800000, 0x7f800000, 0x3000080}, +{0x3000000, 0x80636d24, 0x7f800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80636d24, 0x7f984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80636d24, 0x7fbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80636d24, 0x7fc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80636d24, 0x7fd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80636d24, 0x7fffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80636d24, 0x80000000, 0x0, 0x3000080}, +{0x3000000, 0x80636d24, 0x80000001, 0x0, 0x3000080}, +{0x3000000, 0x80636d24, 0x80000076, 0x0, 0x3000080}, +{0x3000000, 0x80636d24, 0x80002b94, 0x0, 0x3000080}, +{0x3000000, 0x80636d24, 0x80636d24, 0x0, 0x3000080}, +{0x3000000, 0x80636d24, 0x807fffff, 0x0, 0x3000080}, +{0x3000000, 0x80636d24, 0x80800000, 0x80800000, 0x3000080}, +{0x3000000, 0x80636d24, 0x80800002, 0x80800002, 0x3000080}, +{0x3000000, 0x80636d24, 0x81398437, 0x81398437, 0x3000080}, +{0x3000000, 0x80636d24, 0x8ba98d27, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x80636d24, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x80636d24, 0xf51f853a, 0xf51f853a, 0x3000080}, +{0x3000000, 0x80636d24, 0xff7ffff0, 0xff7ffff0, 0x3000080}, +{0x3000000, 0x80636d24, 0xff7fffff, 0xff7fffff, 0x3000080}, +{0x3000000, 0x80636d24, 0xff800000, 0xff800000, 0x3000080}, +{0x3000000, 0x80636d24, 0xff800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80636d24, 0xff984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80636d24, 0xffbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x80636d24, 0xffc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80636d24, 0xffd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80636d24, 0xffffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x80636d24, 0x4f3495cb, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x80636d24, 0xe73a5134, 0xe73a5134, 0x3000080}, +{0x3000000, 0x80636d24, 0x7c994e9e, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x80636d24, 0x6164bd6c, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x80636d24, 0x9503366, 0x9503366, 0x3000080}, +{0x3000000, 0x80636d24, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0x80636d24, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0x80636d24, 0x77f31e2f, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x80636d24, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0x80636d24, 0x966320b, 0x966320b, 0x3000080}, +{0x3000000, 0x80636d24, 0xb26bddee, 0xb26bddee, 0x3000080}, +{0x3000000, 0x80636d24, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0x80636d24, 0x317285d3, 0x317285d3, 0x3000080}, +{0x3000000, 0x80636d24, 0x3c9623b1, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x80636d24, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x80636d24, 0x7b906a6c, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x807fffff, 0x0, 0x0, 0x3000080}, +{0x3000000, 0x807fffff, 0x1, 0x0, 0x3000080}, +{0x3000000, 0x807fffff, 0x76, 0x0, 0x3000080}, +{0x3000000, 0x807fffff, 0x2b94, 0x0, 0x3000080}, +{0x3000000, 0x807fffff, 0x636d24, 0x0, 0x3000080}, +{0x3000000, 0x807fffff, 0x7fffff, 0x0, 0x3000080}, +{0x3000000, 0x807fffff, 0x800000, 0x800000, 0x3000080}, +{0x3000000, 0x807fffff, 0x800002, 0x800002, 0x3000080}, +{0x3000000, 0x807fffff, 0x1398437, 0x1398437, 0x3000080}, +{0x3000000, 0x807fffff, 0xba98d27, 0xba98d27, 0x3000080}, +{0x3000000, 0x807fffff, 0xba98d7a, 0xba98d7a, 0x3000080}, +{0x3000000, 0x807fffff, 0x751f853a, 0x751f853a, 0x3000080}, +{0x3000000, 0x807fffff, 0x7f7ffff0, 0x7f7ffff0, 0x3000080}, +{0x3000000, 0x807fffff, 0x7f7fffff, 0x7f7fffff, 0x3000080}, +{0x3000000, 0x807fffff, 0x7f800000, 0x7f800000, 0x3000080}, +{0x3000000, 0x807fffff, 0x7f800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x807fffff, 0x7f984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x807fffff, 0x7fbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x807fffff, 0x7fc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x807fffff, 0x7fd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x807fffff, 0x7fffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x807fffff, 0x80000000, 0x0, 0x3000080}, +{0x3000000, 0x807fffff, 0x80000001, 0x0, 0x3000080}, +{0x3000000, 0x807fffff, 0x80000076, 0x0, 0x3000080}, +{0x3000000, 0x807fffff, 0x80002b94, 0x0, 0x3000080}, +{0x3000000, 0x807fffff, 0x80636d24, 0x0, 0x3000080}, +{0x3000000, 0x807fffff, 0x807fffff, 0x0, 0x3000080}, +{0x3000000, 0x807fffff, 0x80800000, 0x80800000, 0x3000080}, +{0x3000000, 0x807fffff, 0x80800002, 0x80800002, 0x3000080}, +{0x3000000, 0x807fffff, 0x81398437, 0x81398437, 0x3000080}, +{0x3000000, 0x807fffff, 0x8ba98d27, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x807fffff, 0x8ba98d7a, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x807fffff, 0xf51f853a, 0xf51f853a, 0x3000080}, +{0x3000000, 0x807fffff, 0xff7ffff0, 0xff7ffff0, 0x3000080}, +{0x3000000, 0x807fffff, 0xff7fffff, 0xff7fffff, 0x3000080}, +{0x3000000, 0x807fffff, 0xff800000, 0xff800000, 0x3000080}, +{0x3000000, 0x807fffff, 0xff800001, 0x7fc00000, 0x3000081}, +{0x3000000, 0x807fffff, 0xff984a37, 0x7fc00000, 0x3000081}, +{0x3000000, 0x807fffff, 0xffbfffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0x807fffff, 0xffc00000, 0x7fc00000, 0x3000080}, +{0x3000000, 0x807fffff, 0xffd9ba98, 0x7fc00000, 0x3000080}, +{0x3000000, 0x807fffff, 0xffffffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0x807fffff, 0x4f3495cb, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x807fffff, 0xe73a5134, 0xe73a5134, 0x3000080}, +{0x3000000, 0x807fffff, 0x7c994e9e, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x807fffff, 0x6164bd6c, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x807fffff, 0x9503366, 0x9503366, 0x3000080}, +{0x3000000, 0x807fffff, 0xbf5a97c9, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0x807fffff, 0xe6ff1a14, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0x807fffff, 0x77f31e2f, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x807fffff, 0xaab4d7d8, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0x807fffff, 0x966320b, 0x966320b, 0x3000080}, +{0x3000000, 0x807fffff, 0xb26bddee, 0xb26bddee, 0x3000080}, +{0x3000000, 0x807fffff, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0x807fffff, 0x317285d3, 0x317285d3, 0x3000080}, +{0x3000000, 0x807fffff, 0x3c9623b1, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x807fffff, 0x51fd2c7c, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x807fffff, 0x7b906a6c, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x80800000, 0x0, 0x80800000, 0x3000000}, +{0x3000000, 0x80800000, 0x1, 0x80800000, 0x3000080}, +{0x3000000, 0x80800000, 0x76, 0x80800000, 0x3000080}, +{0x3000000, 0x80800000, 0x2b94, 0x80800000, 0x3000080}, +{0x3000000, 0x80800000, 0x636d24, 0x80800000, 0x3000080}, +{0x3000000, 0x80800000, 0x7fffff, 0x80800000, 0x3000080}, +{0x3000000, 0x80800000, 0x800000, 0x0, 0x3000000}, +{0x3000000, 0x80800000, 0x800002, 0x0, 0x3000008}, +{0x3000000, 0x80800000, 0x1398437, 0xf3086e, 0x3000000}, +{0x3000000, 0x80800000, 0xba98d27, 0xba98d25, 0x3000000}, +{0x3000000, 0x80800000, 0xba98d7a, 0xba98d78, 0x3000000}, +{0x3000000, 0x80800000, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x80800000, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x80800000, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x80800000, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x80800000, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80800000, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80800000, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80800000, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80800000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80800000, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80800000, 0x80000000, 0x80800000, 0x3000000}, +{0x3000000, 0x80800000, 0x80000001, 0x80800000, 0x3000080}, +{0x3000000, 0x80800000, 0x80000076, 0x80800000, 0x3000080}, +{0x3000000, 0x80800000, 0x80002b94, 0x80800000, 0x3000080}, +{0x3000000, 0x80800000, 0x80636d24, 0x80800000, 0x3000080}, +{0x3000000, 0x80800000, 0x807fffff, 0x80800000, 0x3000080}, +{0x3000000, 0x80800000, 0x80800000, 0x81000000, 0x3000000}, +{0x3000000, 0x80800000, 0x80800002, 0x81000001, 0x3000000}, +{0x3000000, 0x80800000, 0x81398437, 0x81798437, 0x3000000}, +{0x3000000, 0x80800000, 0x8ba98d27, 0x8ba98d29, 0x3000000}, +{0x3000000, 0x80800000, 0x8ba98d7a, 0x8ba98d7c, 0x3000000}, +{0x3000000, 0x80800000, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x80800000, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x80800000, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x80800000, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x80800000, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80800000, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80800000, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80800000, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80800000, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80800000, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80800000, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x80800000, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x80800000, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x80800000, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x80800000, 0x9503366, 0x9503326, 0x3000000}, +{0x3000000, 0x80800000, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0x80800000, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x80800000, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x80800000, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0x80800000, 0x966320b, 0x96631cb, 0x3000000}, +{0x3000000, 0x80800000, 0xb26bddee, 0xb26bddee, 0x3000010}, +{0x3000000, 0x80800000, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0x80800000, 0x317285d3, 0x317285d3, 0x3000010}, +{0x3000000, 0x80800000, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x80800000, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x80800000, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x80800002, 0x0, 0x80800002, 0x3000000}, +{0x3000000, 0x80800002, 0x1, 0x80800002, 0x3000080}, +{0x3000000, 0x80800002, 0x76, 0x80800002, 0x3000080}, +{0x3000000, 0x80800002, 0x2b94, 0x80800002, 0x3000080}, +{0x3000000, 0x80800002, 0x636d24, 0x80800002, 0x3000080}, +{0x3000000, 0x80800002, 0x7fffff, 0x80800002, 0x3000080}, +{0x3000000, 0x80800002, 0x800000, 0x0, 0x3000008}, +{0x3000000, 0x80800002, 0x800002, 0x0, 0x3000000}, +{0x3000000, 0x80800002, 0x1398437, 0xf3086c, 0x3000000}, +{0x3000000, 0x80800002, 0xba98d27, 0xba98d25, 0x3000010}, +{0x3000000, 0x80800002, 0xba98d7a, 0xba98d78, 0x3000010}, +{0x3000000, 0x80800002, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x80800002, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x80800002, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x80800002, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x80800002, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80800002, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80800002, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80800002, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80800002, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80800002, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80800002, 0x80000000, 0x80800002, 0x3000000}, +{0x3000000, 0x80800002, 0x80000001, 0x80800002, 0x3000080}, +{0x3000000, 0x80800002, 0x80000076, 0x80800002, 0x3000080}, +{0x3000000, 0x80800002, 0x80002b94, 0x80800002, 0x3000080}, +{0x3000000, 0x80800002, 0x80636d24, 0x80800002, 0x3000080}, +{0x3000000, 0x80800002, 0x807fffff, 0x80800002, 0x3000080}, +{0x3000000, 0x80800002, 0x80800000, 0x81000001, 0x3000000}, +{0x3000000, 0x80800002, 0x80800002, 0x81000002, 0x3000000}, +{0x3000000, 0x80800002, 0x81398437, 0x81798438, 0x3000000}, +{0x3000000, 0x80800002, 0x8ba98d27, 0x8ba98d29, 0x3000010}, +{0x3000000, 0x80800002, 0x8ba98d7a, 0x8ba98d7c, 0x3000010}, +{0x3000000, 0x80800002, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x80800002, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x80800002, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x80800002, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x80800002, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80800002, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80800002, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x80800002, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80800002, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80800002, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x80800002, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x80800002, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x80800002, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x80800002, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x80800002, 0x9503366, 0x9503326, 0x3000010}, +{0x3000000, 0x80800002, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0x80800002, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x80800002, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x80800002, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0x80800002, 0x966320b, 0x96631cb, 0x3000010}, +{0x3000000, 0x80800002, 0xb26bddee, 0xb26bddee, 0x3000010}, +{0x3000000, 0x80800002, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0x80800002, 0x317285d3, 0x317285d3, 0x3000010}, +{0x3000000, 0x80800002, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x80800002, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x80800002, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x81398437, 0x0, 0x81398437, 0x3000000}, +{0x3000000, 0x81398437, 0x1, 0x81398437, 0x3000080}, +{0x3000000, 0x81398437, 0x76, 0x81398437, 0x3000080}, +{0x3000000, 0x81398437, 0x2b94, 0x81398437, 0x3000080}, +{0x3000000, 0x81398437, 0x636d24, 0x81398437, 0x3000080}, +{0x3000000, 0x81398437, 0x7fffff, 0x81398437, 0x3000080}, +{0x3000000, 0x81398437, 0x800000, 0x80f3086e, 0x3000000}, +{0x3000000, 0x81398437, 0x800002, 0x80f3086c, 0x3000000}, +{0x3000000, 0x81398437, 0x1398437, 0x0, 0x3000000}, +{0x3000000, 0x81398437, 0xba98d27, 0xba98d21, 0x3000010}, +{0x3000000, 0x81398437, 0xba98d7a, 0xba98d74, 0x3000010}, +{0x3000000, 0x81398437, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x81398437, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x81398437, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x81398437, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x81398437, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x81398437, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x81398437, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x81398437, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x81398437, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x81398437, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x81398437, 0x80000000, 0x81398437, 0x3000000}, +{0x3000000, 0x81398437, 0x80000001, 0x81398437, 0x3000080}, +{0x3000000, 0x81398437, 0x80000076, 0x81398437, 0x3000080}, +{0x3000000, 0x81398437, 0x80002b94, 0x81398437, 0x3000080}, +{0x3000000, 0x81398437, 0x80636d24, 0x81398437, 0x3000080}, +{0x3000000, 0x81398437, 0x807fffff, 0x81398437, 0x3000080}, +{0x3000000, 0x81398437, 0x80800000, 0x81798437, 0x3000000}, +{0x3000000, 0x81398437, 0x80800002, 0x81798438, 0x3000000}, +{0x3000000, 0x81398437, 0x81398437, 0x81b98437, 0x3000000}, +{0x3000000, 0x81398437, 0x8ba98d27, 0x8ba98d2d, 0x3000010}, +{0x3000000, 0x81398437, 0x8ba98d7a, 0x8ba98d80, 0x3000010}, +{0x3000000, 0x81398437, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x81398437, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x81398437, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x81398437, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x81398437, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x81398437, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x81398437, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x81398437, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x81398437, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x81398437, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x81398437, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x81398437, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x81398437, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x81398437, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x81398437, 0x9503366, 0x95032ac, 0x3000010}, +{0x3000000, 0x81398437, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0x81398437, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x81398437, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x81398437, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0x81398437, 0x966320b, 0x9663151, 0x3000010}, +{0x3000000, 0x81398437, 0xb26bddee, 0xb26bddee, 0x3000010}, +{0x3000000, 0x81398437, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0x81398437, 0x317285d3, 0x317285d3, 0x3000010}, +{0x3000000, 0x81398437, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x81398437, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x81398437, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x0, 0x8ba98d27, 0x3000000}, +{0x3000000, 0x8ba98d27, 0x1, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x8ba98d27, 0x76, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x8ba98d27, 0x2b94, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x8ba98d27, 0x636d24, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x8ba98d27, 0x7fffff, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x8ba98d27, 0x800000, 0x8ba98d25, 0x3000000}, +{0x3000000, 0x8ba98d27, 0x800002, 0x8ba98d25, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x1398437, 0x8ba98d21, 0x3000010}, +{0x3000000, 0x8ba98d27, 0xba98d27, 0x0, 0x3000000}, +{0x3000000, 0x8ba98d27, 0xba98d7a, 0x3260000, 0x3000000}, +{0x3000000, 0x8ba98d27, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x8ba98d27, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x8ba98d27, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x8ba98d27, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x8ba98d27, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x8ba98d27, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x8ba98d27, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x8ba98d27, 0x80000000, 0x8ba98d27, 0x3000000}, +{0x3000000, 0x8ba98d27, 0x80000001, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x8ba98d27, 0x80000076, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x8ba98d27, 0x80002b94, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x8ba98d27, 0x80636d24, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x8ba98d27, 0x807fffff, 0x8ba98d27, 0x3000080}, +{0x3000000, 0x8ba98d27, 0x80800000, 0x8ba98d29, 0x3000000}, +{0x3000000, 0x8ba98d27, 0x80800002, 0x8ba98d29, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x81398437, 0x8ba98d2d, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x8ba98d27, 0x8c298d27, 0x3000000}, +{0x3000000, 0x8ba98d27, 0x8ba98d7a, 0x8c298d50, 0x3000010}, +{0x3000000, 0x8ba98d27, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x8ba98d27, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x8ba98d27, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x8ba98d27, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x8ba98d27, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x8ba98d27, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x8ba98d27, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x8ba98d27, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x8ba98d27, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x8ba98d27, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x8ba98d27, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x8ba98d27, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x9503366, 0x8ba30b8c, 0x3000010}, +{0x3000000, 0x8ba98d27, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0x8ba98d27, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x8ba98d27, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x966320b, 0x8ba25b97, 0x3000010}, +{0x3000000, 0x8ba98d27, 0xb26bddee, 0xb26bddee, 0x3000010}, +{0x3000000, 0x8ba98d27, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x317285d3, 0x317285d3, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x8ba98d27, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x0, 0x8ba98d7a, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0x1, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x8ba98d7a, 0x76, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x8ba98d7a, 0x2b94, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x8ba98d7a, 0x636d24, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x8ba98d7a, 0x7fffff, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x8ba98d7a, 0x800000, 0x8ba98d78, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0x800002, 0x8ba98d78, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x1398437, 0x8ba98d74, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0xba98d27, 0x83260000, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0xba98d7a, 0x0, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x8ba98d7a, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x8ba98d7a, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x8ba98d7a, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0x80000000, 0x8ba98d7a, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0x80000001, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x8ba98d7a, 0x80000076, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x8ba98d7a, 0x80002b94, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x8ba98d7a, 0x80636d24, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x8ba98d7a, 0x807fffff, 0x8ba98d7a, 0x3000080}, +{0x3000000, 0x8ba98d7a, 0x80800000, 0x8ba98d7c, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0x80800002, 0x8ba98d7c, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x81398437, 0x8ba98d80, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x8ba98d27, 0x8c298d50, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x8ba98d7a, 0x8c298d7a, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x8ba98d7a, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x8ba98d7a, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x8ba98d7a, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x8ba98d7a, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x9503366, 0x8ba30bdf, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x966320b, 0x8ba25bea, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0xb26bddee, 0xb26bddee, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x317285d3, 0x317285d3, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x8ba98d7a, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0xf51f853a, 0x0, 0xf51f853a, 0x3000000}, +{0x3000000, 0xf51f853a, 0x1, 0xf51f853a, 0x3000080}, +{0x3000000, 0xf51f853a, 0x76, 0xf51f853a, 0x3000080}, +{0x3000000, 0xf51f853a, 0x2b94, 0xf51f853a, 0x3000080}, +{0x3000000, 0xf51f853a, 0x636d24, 0xf51f853a, 0x3000080}, +{0x3000000, 0xf51f853a, 0x7fffff, 0xf51f853a, 0x3000080}, +{0x3000000, 0xf51f853a, 0x800000, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x800002, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x1398437, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0xba98d27, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0xba98d7a, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x751f853a, 0x0, 0x3000000}, +{0x3000000, 0xf51f853a, 0x7f7ffff0, 0x7f7fffe6, 0x3000010}, +{0x3000000, 0xf51f853a, 0x7f7fffff, 0x7f7ffff5, 0x3000010}, +{0x3000000, 0xf51f853a, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0xf51f853a, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xf51f853a, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xf51f853a, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xf51f853a, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xf51f853a, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xf51f853a, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xf51f853a, 0x80000000, 0xf51f853a, 0x3000000}, +{0x3000000, 0xf51f853a, 0x80000001, 0xf51f853a, 0x3000080}, +{0x3000000, 0xf51f853a, 0x80000076, 0xf51f853a, 0x3000080}, +{0x3000000, 0xf51f853a, 0x80002b94, 0xf51f853a, 0x3000080}, +{0x3000000, 0xf51f853a, 0x80636d24, 0xf51f853a, 0x3000080}, +{0x3000000, 0xf51f853a, 0x807fffff, 0xf51f853a, 0x3000080}, +{0x3000000, 0xf51f853a, 0x80800000, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x80800002, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x81398437, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x8ba98d27, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x8ba98d7a, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0xf51f853a, 0xf59f853a, 0x3000000}, +{0x3000000, 0xf51f853a, 0xff7ffff0, 0xff7ffffa, 0x3000010}, +{0x3000000, 0xf51f853a, 0xff7fffff, 0xff800000, 0x3000014}, +{0x3000000, 0xf51f853a, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0xf51f853a, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xf51f853a, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xf51f853a, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xf51f853a, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xf51f853a, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xf51f853a, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xf51f853a, 0x4f3495cb, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0xe73a5134, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x7c994e9e, 0x7c994d5f, 0x3000010}, +{0x3000000, 0xf51f853a, 0x6164bd6c, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x9503366, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0xbf5a97c9, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0xe6ff1a14, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x77f31e2f, 0x77ee2205, 0x3000010}, +{0x3000000, 0xf51f853a, 0xaab4d7d8, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x966320b, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0xb26bddee, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0xb5c8e5d3, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x317285d3, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x3c9623b1, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x51fd2c7c, 0xf51f853a, 0x3000010}, +{0x3000000, 0xf51f853a, 0x7b906a6c, 0x7b906570, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x0, 0xff7ffff0, 0x3000000}, +{0x3000000, 0xff7ffff0, 0x1, 0xff7ffff0, 0x3000080}, +{0x3000000, 0xff7ffff0, 0x76, 0xff7ffff0, 0x3000080}, +{0x3000000, 0xff7ffff0, 0x2b94, 0xff7ffff0, 0x3000080}, +{0x3000000, 0xff7ffff0, 0x636d24, 0xff7ffff0, 0x3000080}, +{0x3000000, 0xff7ffff0, 0x7fffff, 0xff7ffff0, 0x3000080}, +{0x3000000, 0xff7ffff0, 0x800000, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x800002, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x1398437, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0xba98d27, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0xba98d7a, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x751f853a, 0xff7fffe6, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x7f7ffff0, 0x0, 0x3000000}, +{0x3000000, 0xff7ffff0, 0x7f7fffff, 0x75700000, 0x3000000}, +{0x3000000, 0xff7ffff0, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0xff7ffff0, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff7ffff0, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff7ffff0, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff7ffff0, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff7ffff0, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff7ffff0, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff7ffff0, 0x80000000, 0xff7ffff0, 0x3000000}, +{0x3000000, 0xff7ffff0, 0x80000001, 0xff7ffff0, 0x3000080}, +{0x3000000, 0xff7ffff0, 0x80000076, 0xff7ffff0, 0x3000080}, +{0x3000000, 0xff7ffff0, 0x80002b94, 0xff7ffff0, 0x3000080}, +{0x3000000, 0xff7ffff0, 0x80636d24, 0xff7ffff0, 0x3000080}, +{0x3000000, 0xff7ffff0, 0x807fffff, 0xff7ffff0, 0x3000080}, +{0x3000000, 0xff7ffff0, 0x80800000, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x80800002, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x81398437, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x8ba98d27, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x8ba98d7a, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0xf51f853a, 0xff7ffffa, 0x3000010}, +{0x3000000, 0xff7ffff0, 0xff7ffff0, 0xff800000, 0x3000014}, +{0x3000000, 0xff7ffff0, 0xff7fffff, 0xff800000, 0x3000014}, +{0x3000000, 0xff7ffff0, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0xff7ffff0, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff7ffff0, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff7ffff0, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff7ffff0, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff7ffff0, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff7ffff0, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff7ffff0, 0x4f3495cb, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0xe73a5134, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x7c994e9e, 0xff7b357b, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x6164bd6c, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x9503366, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0xbf5a97c9, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0xe6ff1a14, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x77f31e2f, 0xff7ffe0a, 0x3000010}, +{0x3000000, 0xff7ffff0, 0xaab4d7d8, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x966320b, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0xb26bddee, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0xb5c8e5d3, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x317285d3, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x3c9623b1, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x51fd2c7c, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xff7ffff0, 0x7b906a6c, 0xff7edf1b, 0x3000010}, +{0x3000000, 0xff7fffff, 0x0, 0xff7fffff, 0x3000000}, +{0x3000000, 0xff7fffff, 0x1, 0xff7fffff, 0x3000080}, +{0x3000000, 0xff7fffff, 0x76, 0xff7fffff, 0x3000080}, +{0x3000000, 0xff7fffff, 0x2b94, 0xff7fffff, 0x3000080}, +{0x3000000, 0xff7fffff, 0x636d24, 0xff7fffff, 0x3000080}, +{0x3000000, 0xff7fffff, 0x7fffff, 0xff7fffff, 0x3000080}, +{0x3000000, 0xff7fffff, 0x800000, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x800002, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x1398437, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0xba98d27, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0xba98d7a, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x751f853a, 0xff7ffff5, 0x3000010}, +{0x3000000, 0xff7fffff, 0x7f7ffff0, 0xf5700000, 0x3000000}, +{0x3000000, 0xff7fffff, 0x7f7fffff, 0x0, 0x3000000}, +{0x3000000, 0xff7fffff, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0xff7fffff, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff7fffff, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff7fffff, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff7fffff, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff7fffff, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff7fffff, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff7fffff, 0x80000000, 0xff7fffff, 0x3000000}, +{0x3000000, 0xff7fffff, 0x80000001, 0xff7fffff, 0x3000080}, +{0x3000000, 0xff7fffff, 0x80000076, 0xff7fffff, 0x3000080}, +{0x3000000, 0xff7fffff, 0x80002b94, 0xff7fffff, 0x3000080}, +{0x3000000, 0xff7fffff, 0x80636d24, 0xff7fffff, 0x3000080}, +{0x3000000, 0xff7fffff, 0x807fffff, 0xff7fffff, 0x3000080}, +{0x3000000, 0xff7fffff, 0x80800000, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x80800002, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x81398437, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x8ba98d27, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x8ba98d7a, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0xf51f853a, 0xff800000, 0x3000014}, +{0x3000000, 0xff7fffff, 0xff7ffff0, 0xff800000, 0x3000014}, +{0x3000000, 0xff7fffff, 0xff7fffff, 0xff800000, 0x3000014}, +{0x3000000, 0xff7fffff, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0xff7fffff, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff7fffff, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff7fffff, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff7fffff, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff7fffff, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff7fffff, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff7fffff, 0x4f3495cb, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0xe73a5134, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x7c994e9e, 0xff7b358a, 0x3000010}, +{0x3000000, 0xff7fffff, 0x6164bd6c, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x9503366, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0xbf5a97c9, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0xe6ff1a14, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x77f31e2f, 0xff7ffe19, 0x3000010}, +{0x3000000, 0xff7fffff, 0xaab4d7d8, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x966320b, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0xb26bddee, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0xb5c8e5d3, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x317285d3, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x3c9623b1, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x51fd2c7c, 0xff7fffff, 0x3000010}, +{0x3000000, 0xff7fffff, 0x7b906a6c, 0xff7edf2a, 0x3000010}, +{0x3000000, 0xff800000, 0x0, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x1, 0xff800000, 0x3000080}, +{0x3000000, 0xff800000, 0x76, 0xff800000, 0x3000080}, +{0x3000000, 0xff800000, 0x2b94, 0xff800000, 0x3000080}, +{0x3000000, 0xff800000, 0x636d24, 0xff800000, 0x3000080}, +{0x3000000, 0xff800000, 0x7fffff, 0xff800000, 0x3000080}, +{0x3000000, 0xff800000, 0x800000, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x800002, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x1398437, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xba98d27, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xba98d7a, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x751f853a, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x7f7ffff0, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x7f7fffff, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x7f800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800000, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800000, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800000, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800000, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff800000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff800000, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff800000, 0x80000000, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x80000001, 0xff800000, 0x3000080}, +{0x3000000, 0xff800000, 0x80000076, 0xff800000, 0x3000080}, +{0x3000000, 0xff800000, 0x80002b94, 0xff800000, 0x3000080}, +{0x3000000, 0xff800000, 0x80636d24, 0xff800000, 0x3000080}, +{0x3000000, 0xff800000, 0x807fffff, 0xff800000, 0x3000080}, +{0x3000000, 0xff800000, 0x80800000, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x80800002, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x81398437, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x8ba98d27, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x8ba98d7a, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xf51f853a, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xff7ffff0, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xff7fffff, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800000, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800000, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800000, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff800000, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff800000, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xff800000, 0x4f3495cb, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xe73a5134, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x7c994e9e, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x6164bd6c, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x9503366, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xbf5a97c9, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xe6ff1a14, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x77f31e2f, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xaab4d7d8, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x966320b, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xb26bddee, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0xb5c8e5d3, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x317285d3, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x3c9623b1, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x51fd2c7c, 0xff800000, 0x3000000}, +{0x3000000, 0xff800000, 0x7b906a6c, 0xff800000, 0x3000000}, +{0x3000000, 0xff800001, 0x0, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x1, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff800001, 0x76, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff800001, 0x2b94, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff800001, 0x636d24, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff800001, 0x7fffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff800001, 0x800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x800002, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x1398437, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xba98d27, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xba98d7a, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x751f853a, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x7f7ffff0, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x7f7fffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x7f800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x7fc00000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x7fd9ba98, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x7fffffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x80000000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x80000001, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff800001, 0x80000076, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff800001, 0x80002b94, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff800001, 0x80636d24, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff800001, 0x807fffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff800001, 0x80800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x80800002, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x81398437, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x8ba98d27, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x8ba98d7a, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xf51f853a, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xff7ffff0, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xff7fffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xff800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xffc00000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xffd9ba98, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xffffffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x4f3495cb, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xe73a5134, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x7c994e9e, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x6164bd6c, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x9503366, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xbf5a97c9, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xe6ff1a14, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x77f31e2f, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xaab4d7d8, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x966320b, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xb26bddee, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0xb5c8e5d3, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x317285d3, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x3c9623b1, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x51fd2c7c, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff800001, 0x7b906a6c, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x0, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x1, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff984a37, 0x76, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff984a37, 0x2b94, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff984a37, 0x636d24, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff984a37, 0x7fffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff984a37, 0x800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x800002, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x1398437, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xba98d27, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xba98d7a, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x751f853a, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x7f7ffff0, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x7f7fffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x7f800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x7fc00000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x7fd9ba98, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x7fffffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x80000000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x80000001, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff984a37, 0x80000076, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff984a37, 0x80002b94, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff984a37, 0x80636d24, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff984a37, 0x807fffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0xff984a37, 0x80800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x80800002, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x81398437, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x8ba98d27, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x8ba98d7a, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xf51f853a, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xff7ffff0, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xff7fffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xff800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xffc00000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xffd9ba98, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xffffffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x4f3495cb, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xe73a5134, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x7c994e9e, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x6164bd6c, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x9503366, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xbf5a97c9, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xe6ff1a14, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x77f31e2f, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xaab4d7d8, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x966320b, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xb26bddee, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0xb5c8e5d3, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x317285d3, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x3c9623b1, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x51fd2c7c, 0x7fc00000, 0x3000001}, +{0x3000000, 0xff984a37, 0x7b906a6c, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x0, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x1, 0x7fc00000, 0x3000081}, +{0x3000000, 0xffbfffff, 0x76, 0x7fc00000, 0x3000081}, +{0x3000000, 0xffbfffff, 0x2b94, 0x7fc00000, 0x3000081}, +{0x3000000, 0xffbfffff, 0x636d24, 0x7fc00000, 0x3000081}, +{0x3000000, 0xffbfffff, 0x7fffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0xffbfffff, 0x800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x800002, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x1398437, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xba98d27, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xba98d7a, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x751f853a, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x7f7ffff0, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x7f7fffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x7f800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x7fc00000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x7fd9ba98, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x7fffffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x80000000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x80000001, 0x7fc00000, 0x3000081}, +{0x3000000, 0xffbfffff, 0x80000076, 0x7fc00000, 0x3000081}, +{0x3000000, 0xffbfffff, 0x80002b94, 0x7fc00000, 0x3000081}, +{0x3000000, 0xffbfffff, 0x80636d24, 0x7fc00000, 0x3000081}, +{0x3000000, 0xffbfffff, 0x807fffff, 0x7fc00000, 0x3000081}, +{0x3000000, 0xffbfffff, 0x80800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x80800002, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x81398437, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x8ba98d27, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x8ba98d7a, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xf51f853a, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xff7ffff0, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xff7fffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xff800000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xffc00000, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xffd9ba98, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xffffffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x4f3495cb, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xe73a5134, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x7c994e9e, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x6164bd6c, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x9503366, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xbf5a97c9, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xe6ff1a14, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x77f31e2f, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xaab4d7d8, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x966320b, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xb26bddee, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0xb5c8e5d3, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x317285d3, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x3c9623b1, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x51fd2c7c, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffbfffff, 0x7b906a6c, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffc00000, 0x0, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x1, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffc00000, 0x76, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffc00000, 0x2b94, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffc00000, 0x636d24, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffc00000, 0x7fffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffc00000, 0x800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x800002, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x1398437, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xba98d27, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xba98d7a, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x751f853a, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x7f7ffff0, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x7f7fffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x7f800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffc00000, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffc00000, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffc00000, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x80000000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x80000001, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffc00000, 0x80000076, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffc00000, 0x80002b94, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffc00000, 0x80636d24, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffc00000, 0x807fffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffc00000, 0x80800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x80800002, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x81398437, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x8ba98d27, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x8ba98d7a, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xf51f853a, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xff7ffff0, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xff7fffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xff800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffc00000, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffc00000, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffc00000, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x4f3495cb, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xe73a5134, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x7c994e9e, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x6164bd6c, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x9503366, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xbf5a97c9, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xe6ff1a14, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x77f31e2f, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xaab4d7d8, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x966320b, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xb26bddee, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0xb5c8e5d3, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x317285d3, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x3c9623b1, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x51fd2c7c, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffc00000, 0x7b906a6c, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x0, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x1, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffd9ba98, 0x76, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffd9ba98, 0x2b94, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffd9ba98, 0x636d24, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffd9ba98, 0x7fffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffd9ba98, 0x800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x800002, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x1398437, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xba98d27, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xba98d7a, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x751f853a, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x7f7ffff0, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x7f7fffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x7f800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffd9ba98, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffd9ba98, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffd9ba98, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x80000000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x80000001, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffd9ba98, 0x80000076, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffd9ba98, 0x80002b94, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffd9ba98, 0x80636d24, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffd9ba98, 0x807fffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffd9ba98, 0x80800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x80800002, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x81398437, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x8ba98d27, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x8ba98d7a, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xf51f853a, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xff7ffff0, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xff7fffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xff800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffd9ba98, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffd9ba98, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffd9ba98, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x4f3495cb, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xe73a5134, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x7c994e9e, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x6164bd6c, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x9503366, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xbf5a97c9, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xe6ff1a14, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x77f31e2f, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xaab4d7d8, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x966320b, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xb26bddee, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0xb5c8e5d3, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x317285d3, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x3c9623b1, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x51fd2c7c, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffd9ba98, 0x7b906a6c, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x0, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x1, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffffffff, 0x76, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffffffff, 0x2b94, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffffffff, 0x636d24, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffffffff, 0x7fffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffffffff, 0x800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x800002, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x1398437, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xba98d27, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xba98d7a, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x751f853a, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x7f7ffff0, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x7f7fffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x7f800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffffffff, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffffffff, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffffffff, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x80000000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x80000001, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffffffff, 0x80000076, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffffffff, 0x80002b94, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffffffff, 0x80636d24, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffffffff, 0x807fffff, 0x7fc00000, 0x3000080}, +{0x3000000, 0xffffffff, 0x80800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x80800002, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x81398437, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x8ba98d27, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x8ba98d7a, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xf51f853a, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xff7ffff0, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xff7fffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xff800000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffffffff, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffffffff, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xffffffff, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x4f3495cb, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xe73a5134, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x7c994e9e, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x6164bd6c, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x9503366, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xbf5a97c9, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xe6ff1a14, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x77f31e2f, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xaab4d7d8, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x966320b, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xb26bddee, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0xb5c8e5d3, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x317285d3, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x3c9623b1, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x51fd2c7c, 0x7fc00000, 0x3000000}, +{0x3000000, 0xffffffff, 0x7b906a6c, 0x7fc00000, 0x3000000}, +{0x3000000, 0x4f3495cb, 0x0, 0x4f3495cb, 0x3000000}, +{0x3000000, 0x4f3495cb, 0x1, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x4f3495cb, 0x76, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x4f3495cb, 0x2b94, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x4f3495cb, 0x636d24, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x4f3495cb, 0x7fffff, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x4f3495cb, 0x800000, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x800002, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x1398437, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0xba98d27, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0xba98d7a, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x4f3495cb, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x4f3495cb, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x4f3495cb, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x4f3495cb, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x4f3495cb, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x4f3495cb, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x4f3495cb, 0x80000000, 0x4f3495cb, 0x3000000}, +{0x3000000, 0x4f3495cb, 0x80000001, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x4f3495cb, 0x80000076, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x4f3495cb, 0x80002b94, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x4f3495cb, 0x80636d24, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x4f3495cb, 0x807fffff, 0x4f3495cb, 0x3000080}, +{0x3000000, 0x4f3495cb, 0x80800000, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x80800002, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x81398437, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x8ba98d27, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x8ba98d7a, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x4f3495cb, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x4f3495cb, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x4f3495cb, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x4f3495cb, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x4f3495cb, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x4f3495cb, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x4f3495cb, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x4f3495cb, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x4f3495cb, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x4f3495cb, 0x4f3495cb, 0x4fb495cb, 0x3000000}, +{0x3000000, 0x4f3495cb, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x9503366, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0xbf5a97c9, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x4f3495cb, 0xaab4d7d8, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x966320b, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0xb26bddee, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0xb5c8e5d3, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x317285d3, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x3c9623b1, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x51fd2c7c, 0x52016895, 0x3000010}, +{0x3000000, 0x4f3495cb, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0xe73a5134, 0x0, 0xe73a5134, 0x3000000}, +{0x3000000, 0xe73a5134, 0x1, 0xe73a5134, 0x3000080}, +{0x3000000, 0xe73a5134, 0x76, 0xe73a5134, 0x3000080}, +{0x3000000, 0xe73a5134, 0x2b94, 0xe73a5134, 0x3000080}, +{0x3000000, 0xe73a5134, 0x636d24, 0xe73a5134, 0x3000080}, +{0x3000000, 0xe73a5134, 0x7fffff, 0xe73a5134, 0x3000080}, +{0x3000000, 0xe73a5134, 0x800000, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0x800002, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0x1398437, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0xba98d27, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0xba98d7a, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0xe73a5134, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0xe73a5134, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0xe73a5134, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0xe73a5134, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xe73a5134, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xe73a5134, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xe73a5134, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xe73a5134, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xe73a5134, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xe73a5134, 0x80000000, 0xe73a5134, 0x3000000}, +{0x3000000, 0xe73a5134, 0x80000001, 0xe73a5134, 0x3000080}, +{0x3000000, 0xe73a5134, 0x80000076, 0xe73a5134, 0x3000080}, +{0x3000000, 0xe73a5134, 0x80002b94, 0xe73a5134, 0x3000080}, +{0x3000000, 0xe73a5134, 0x80636d24, 0xe73a5134, 0x3000080}, +{0x3000000, 0xe73a5134, 0x807fffff, 0xe73a5134, 0x3000080}, +{0x3000000, 0xe73a5134, 0x80800000, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0x80800002, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0x81398437, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0x8ba98d27, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0x8ba98d7a, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0xe73a5134, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xe73a5134, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0xe73a5134, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0xe73a5134, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xe73a5134, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xe73a5134, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xe73a5134, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xe73a5134, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xe73a5134, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xe73a5134, 0x4f3495cb, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0xe73a5134, 0xe7ba5134, 0x3000000}, +{0x3000000, 0xe73a5134, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0xe73a5134, 0x6164bd6c, 0xe73a42e8, 0x3000010}, +{0x3000000, 0xe73a5134, 0x9503366, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0xbf5a97c9, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0xe6ff1a14, 0xe79cef1f, 0x3000000}, +{0x3000000, 0xe73a5134, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0xe73a5134, 0xaab4d7d8, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0x966320b, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0xb26bddee, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0xb5c8e5d3, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0x317285d3, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0x3c9623b1, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0x51fd2c7c, 0xe73a5134, 0x3000010}, +{0x3000000, 0xe73a5134, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x0, 0x7c994e9e, 0x3000000}, +{0x3000000, 0x7c994e9e, 0x1, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x7c994e9e, 0x76, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x7c994e9e, 0x2b94, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x7c994e9e, 0x636d24, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x7c994e9e, 0x7fffff, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x7c994e9e, 0x800000, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x800002, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x1398437, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0xba98d27, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0xba98d7a, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x751f853a, 0x7c994fdd, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x7f7ffff0, 0x7f800000, 0x3000014}, +{0x3000000, 0x7c994e9e, 0x7f7fffff, 0x7f800000, 0x3000014}, +{0x3000000, 0x7c994e9e, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x7c994e9e, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7c994e9e, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7c994e9e, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7c994e9e, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7c994e9e, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7c994e9e, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7c994e9e, 0x80000000, 0x7c994e9e, 0x3000000}, +{0x3000000, 0x7c994e9e, 0x80000001, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x7c994e9e, 0x80000076, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x7c994e9e, 0x80002b94, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x7c994e9e, 0x80636d24, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x7c994e9e, 0x807fffff, 0x7c994e9e, 0x3000080}, +{0x3000000, 0x7c994e9e, 0x80800000, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x80800002, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x81398437, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x8ba98d27, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x8ba98d7a, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0xf51f853a, 0x7c994d5f, 0x3000010}, +{0x3000000, 0x7c994e9e, 0xff7ffff0, 0xff7b357b, 0x3000010}, +{0x3000000, 0x7c994e9e, 0xff7fffff, 0xff7b358a, 0x3000010}, +{0x3000000, 0x7c994e9e, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x7c994e9e, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7c994e9e, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7c994e9e, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7c994e9e, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7c994e9e, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7c994e9e, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7c994e9e, 0x4f3495cb, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0xe73a5134, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x7c994e9e, 0x7d194e9e, 0x3000000}, +{0x3000000, 0x7c994e9e, 0x6164bd6c, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x9503366, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0xbf5a97c9, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0xe6ff1a14, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x77f31e2f, 0x7c998b66, 0x3000010}, +{0x3000000, 0x7c994e9e, 0xaab4d7d8, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x966320b, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0xb26bddee, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0xb5c8e5d3, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x317285d3, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x3c9623b1, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x51fd2c7c, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x7c994e9e, 0x7b906a6c, 0x7cbd6939, 0x3000000}, +{0x3000000, 0x6164bd6c, 0x0, 0x6164bd6c, 0x3000000}, +{0x3000000, 0x6164bd6c, 0x1, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x6164bd6c, 0x76, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x6164bd6c, 0x2b94, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x6164bd6c, 0x636d24, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x6164bd6c, 0x7fffff, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x6164bd6c, 0x800000, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x800002, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x1398437, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0xba98d27, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0xba98d7a, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x6164bd6c, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x6164bd6c, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x6164bd6c, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x6164bd6c, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x6164bd6c, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x6164bd6c, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x6164bd6c, 0x80000000, 0x6164bd6c, 0x3000000}, +{0x3000000, 0x6164bd6c, 0x80000001, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x6164bd6c, 0x80000076, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x6164bd6c, 0x80002b94, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x6164bd6c, 0x80636d24, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x6164bd6c, 0x807fffff, 0x6164bd6c, 0x3000080}, +{0x3000000, 0x6164bd6c, 0x80800000, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x80800002, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x81398437, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x8ba98d27, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x8ba98d7a, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x6164bd6c, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x6164bd6c, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x6164bd6c, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x6164bd6c, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x6164bd6c, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x6164bd6c, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x6164bd6c, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x6164bd6c, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x6164bd6c, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x6164bd6c, 0x4f3495cb, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0xe73a5134, 0xe73a42e8, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x6164bd6c, 0x61e4bd6c, 0x3000000}, +{0x3000000, 0x6164bd6c, 0x9503366, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0xbf5a97c9, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0xe6ff1a14, 0xe6fefd7c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x6164bd6c, 0xaab4d7d8, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x966320b, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0xb26bddee, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0xb5c8e5d3, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x317285d3, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x3c9623b1, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x51fd2c7c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x6164bd6c, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x9503366, 0x0, 0x9503366, 0x3000000}, +{0x3000000, 0x9503366, 0x1, 0x9503366, 0x3000080}, +{0x3000000, 0x9503366, 0x76, 0x9503366, 0x3000080}, +{0x3000000, 0x9503366, 0x2b94, 0x9503366, 0x3000080}, +{0x3000000, 0x9503366, 0x636d24, 0x9503366, 0x3000080}, +{0x3000000, 0x9503366, 0x7fffff, 0x9503366, 0x3000080}, +{0x3000000, 0x9503366, 0x800000, 0x95033a6, 0x3000000}, +{0x3000000, 0x9503366, 0x800002, 0x95033a6, 0x3000010}, +{0x3000000, 0x9503366, 0x1398437, 0x9503420, 0x3000010}, +{0x3000000, 0x9503366, 0xba98d27, 0xbb00ec2, 0x3000010}, +{0x3000000, 0x9503366, 0xba98d7a, 0xbb00f15, 0x3000010}, +{0x3000000, 0x9503366, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x9503366, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x9503366, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x9503366, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x9503366, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x9503366, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x9503366, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x9503366, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x9503366, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x9503366, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x9503366, 0x80000000, 0x9503366, 0x3000000}, +{0x3000000, 0x9503366, 0x80000001, 0x9503366, 0x3000080}, +{0x3000000, 0x9503366, 0x80000076, 0x9503366, 0x3000080}, +{0x3000000, 0x9503366, 0x80002b94, 0x9503366, 0x3000080}, +{0x3000000, 0x9503366, 0x80636d24, 0x9503366, 0x3000080}, +{0x3000000, 0x9503366, 0x807fffff, 0x9503366, 0x3000080}, +{0x3000000, 0x9503366, 0x80800000, 0x9503326, 0x3000000}, +{0x3000000, 0x9503366, 0x80800002, 0x9503326, 0x3000010}, +{0x3000000, 0x9503366, 0x81398437, 0x95032ac, 0x3000010}, +{0x3000000, 0x9503366, 0x8ba98d27, 0x8ba30b8c, 0x3000010}, +{0x3000000, 0x9503366, 0x8ba98d7a, 0x8ba30bdf, 0x3000010}, +{0x3000000, 0x9503366, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x9503366, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x9503366, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x9503366, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x9503366, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x9503366, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x9503366, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x9503366, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x9503366, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x9503366, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x9503366, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x9503366, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x9503366, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x9503366, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x9503366, 0x9503366, 0x9d03366, 0x3000000}, +{0x3000000, 0x9503366, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0x9503366, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x9503366, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x9503366, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0x9503366, 0x966320b, 0x9db32b8, 0x3000010}, +{0x3000000, 0x9503366, 0xb26bddee, 0xb26bddee, 0x3000010}, +{0x3000000, 0x9503366, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0x9503366, 0x317285d3, 0x317285d3, 0x3000010}, +{0x3000000, 0x9503366, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x9503366, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x9503366, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x0, 0xbf5a97c9, 0x3000000}, +{0x3000000, 0xbf5a97c9, 0x1, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0xbf5a97c9, 0x76, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0xbf5a97c9, 0x2b94, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0xbf5a97c9, 0x636d24, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0xbf5a97c9, 0x7fffff, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0xbf5a97c9, 0x800000, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x800002, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x1398437, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0xba98d27, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0xba98d7a, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0xbf5a97c9, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xbf5a97c9, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xbf5a97c9, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xbf5a97c9, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xbf5a97c9, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xbf5a97c9, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xbf5a97c9, 0x80000000, 0xbf5a97c9, 0x3000000}, +{0x3000000, 0xbf5a97c9, 0x80000001, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0xbf5a97c9, 0x80000076, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0xbf5a97c9, 0x80002b94, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0xbf5a97c9, 0x80636d24, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0xbf5a97c9, 0x807fffff, 0xbf5a97c9, 0x3000080}, +{0x3000000, 0xbf5a97c9, 0x80800000, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x80800002, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x81398437, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x8ba98d27, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x8ba98d7a, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0xbf5a97c9, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xbf5a97c9, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xbf5a97c9, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xbf5a97c9, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xbf5a97c9, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xbf5a97c9, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xbf5a97c9, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x9503366, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0xbf5a97c9, 0xbfda97c9, 0x3000000}, +{0x3000000, 0xbf5a97c9, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0xaab4d7d8, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x966320b, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0xb26bddee, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0xb5c8e5d3, 0xbf5a97e2, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x317285d3, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x3c9623b1, 0xbf55e6ab, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0xbf5a97c9, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x0, 0xe6ff1a14, 0x3000000}, +{0x3000000, 0xe6ff1a14, 0x1, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0xe6ff1a14, 0x76, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0xe6ff1a14, 0x2b94, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0xe6ff1a14, 0x636d24, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0xe6ff1a14, 0x7fffff, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0xe6ff1a14, 0x800000, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x800002, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x1398437, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0xba98d27, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0xba98d7a, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0xe6ff1a14, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xe6ff1a14, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xe6ff1a14, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xe6ff1a14, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xe6ff1a14, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xe6ff1a14, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xe6ff1a14, 0x80000000, 0xe6ff1a14, 0x3000000}, +{0x3000000, 0xe6ff1a14, 0x80000001, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0xe6ff1a14, 0x80000076, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0xe6ff1a14, 0x80002b94, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0xe6ff1a14, 0x80636d24, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0xe6ff1a14, 0x807fffff, 0xe6ff1a14, 0x3000080}, +{0x3000000, 0xe6ff1a14, 0x80800000, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x80800002, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x81398437, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x8ba98d27, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x8ba98d7a, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0xe6ff1a14, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xe6ff1a14, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xe6ff1a14, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xe6ff1a14, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xe6ff1a14, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xe6ff1a14, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xe6ff1a14, 0x4f3495cb, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0xe73a5134, 0xe79cef1f, 0x3000000}, +{0x3000000, 0xe6ff1a14, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x6164bd6c, 0xe6fefd7c, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x9503366, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0xbf5a97c9, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0xe6ff1a14, 0xe77f1a14, 0x3000000}, +{0x3000000, 0xe6ff1a14, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0xaab4d7d8, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x966320b, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0xb26bddee, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0xb5c8e5d3, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x317285d3, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x3c9623b1, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x51fd2c7c, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xe6ff1a14, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x0, 0x77f31e2f, 0x3000000}, +{0x3000000, 0x77f31e2f, 0x1, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x77f31e2f, 0x76, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x77f31e2f, 0x2b94, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x77f31e2f, 0x636d24, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x77f31e2f, 0x7fffff, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x77f31e2f, 0x800000, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x800002, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x1398437, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0xba98d27, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0xba98d7a, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x751f853a, 0x77f81a59, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x7f7ffff0, 0x7f800000, 0x3000014}, +{0x3000000, 0x77f31e2f, 0x7f7fffff, 0x7f800000, 0x3000014}, +{0x3000000, 0x77f31e2f, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x77f31e2f, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x77f31e2f, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x77f31e2f, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x77f31e2f, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x77f31e2f, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x77f31e2f, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x77f31e2f, 0x80000000, 0x77f31e2f, 0x3000000}, +{0x3000000, 0x77f31e2f, 0x80000001, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x77f31e2f, 0x80000076, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x77f31e2f, 0x80002b94, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x77f31e2f, 0x80636d24, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x77f31e2f, 0x807fffff, 0x77f31e2f, 0x3000080}, +{0x3000000, 0x77f31e2f, 0x80800000, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x80800002, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x81398437, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x8ba98d27, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x8ba98d7a, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0xf51f853a, 0x77ee2205, 0x3000010}, +{0x3000000, 0x77f31e2f, 0xff7ffff0, 0xff7ffe0a, 0x3000010}, +{0x3000000, 0x77f31e2f, 0xff7fffff, 0xff7ffe19, 0x3000010}, +{0x3000000, 0x77f31e2f, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x77f31e2f, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x77f31e2f, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x77f31e2f, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x77f31e2f, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x77f31e2f, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x77f31e2f, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x77f31e2f, 0x4f3495cb, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0xe73a5134, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x7c994e9e, 0x7c998b66, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x6164bd6c, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x9503366, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0xbf5a97c9, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0xe6ff1a14, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x77f31e2f, 0x78731e2f, 0x3000000}, +{0x3000000, 0x77f31e2f, 0xaab4d7d8, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x966320b, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0xb26bddee, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0xb5c8e5d3, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x317285d3, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x3c9623b1, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x51fd2c7c, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x77f31e2f, 0x7b906a6c, 0x7b915d8a, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x0, 0xaab4d7d8, 0x3000000}, +{0x3000000, 0xaab4d7d8, 0x1, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0xaab4d7d8, 0x76, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0xaab4d7d8, 0x2b94, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0xaab4d7d8, 0x636d24, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0xaab4d7d8, 0x7fffff, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0xaab4d7d8, 0x800000, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x800002, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x1398437, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0xba98d27, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0xba98d7a, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0xaab4d7d8, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xaab4d7d8, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xaab4d7d8, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xaab4d7d8, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xaab4d7d8, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xaab4d7d8, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xaab4d7d8, 0x80000000, 0xaab4d7d8, 0x3000000}, +{0x3000000, 0xaab4d7d8, 0x80000001, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0xaab4d7d8, 0x80000076, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0xaab4d7d8, 0x80002b94, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0xaab4d7d8, 0x80636d24, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0xaab4d7d8, 0x807fffff, 0xaab4d7d8, 0x3000080}, +{0x3000000, 0xaab4d7d8, 0x80800000, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x80800002, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x81398437, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x8ba98d27, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x8ba98d7a, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0xaab4d7d8, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xaab4d7d8, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xaab4d7d8, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xaab4d7d8, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xaab4d7d8, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xaab4d7d8, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xaab4d7d8, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x9503366, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0xaab4d7d8, 0xab34d7d8, 0x3000000}, +{0x3000000, 0xaab4d7d8, 0x966320b, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0xb26bddee, 0xb26bdf58, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0xb5c8e5d3, 0xb5c8e5d6, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x317285d3, 0x3172802c, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0xaab4d7d8, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x966320b, 0x0, 0x966320b, 0x3000000}, +{0x3000000, 0x966320b, 0x1, 0x966320b, 0x3000080}, +{0x3000000, 0x966320b, 0x76, 0x966320b, 0x3000080}, +{0x3000000, 0x966320b, 0x2b94, 0x966320b, 0x3000080}, +{0x3000000, 0x966320b, 0x636d24, 0x966320b, 0x3000080}, +{0x3000000, 0x966320b, 0x7fffff, 0x966320b, 0x3000080}, +{0x3000000, 0x966320b, 0x800000, 0x966324b, 0x3000000}, +{0x3000000, 0x966320b, 0x800002, 0x966324b, 0x3000010}, +{0x3000000, 0x966320b, 0x1398437, 0x96632c5, 0x3000010}, +{0x3000000, 0x966320b, 0xba98d27, 0xbb0beb7, 0x3000010}, +{0x3000000, 0x966320b, 0xba98d7a, 0xbb0bf0a, 0x3000010}, +{0x3000000, 0x966320b, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x966320b, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x966320b, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x966320b, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x966320b, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x966320b, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x966320b, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x966320b, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x966320b, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x966320b, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x966320b, 0x80000000, 0x966320b, 0x3000000}, +{0x3000000, 0x966320b, 0x80000001, 0x966320b, 0x3000080}, +{0x3000000, 0x966320b, 0x80000076, 0x966320b, 0x3000080}, +{0x3000000, 0x966320b, 0x80002b94, 0x966320b, 0x3000080}, +{0x3000000, 0x966320b, 0x80636d24, 0x966320b, 0x3000080}, +{0x3000000, 0x966320b, 0x807fffff, 0x966320b, 0x3000080}, +{0x3000000, 0x966320b, 0x80800000, 0x96631cb, 0x3000000}, +{0x3000000, 0x966320b, 0x80800002, 0x96631cb, 0x3000010}, +{0x3000000, 0x966320b, 0x81398437, 0x9663151, 0x3000010}, +{0x3000000, 0x966320b, 0x8ba98d27, 0x8ba25b97, 0x3000010}, +{0x3000000, 0x966320b, 0x8ba98d7a, 0x8ba25bea, 0x3000010}, +{0x3000000, 0x966320b, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x966320b, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x966320b, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x966320b, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x966320b, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x966320b, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x966320b, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x966320b, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x966320b, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x966320b, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x966320b, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x966320b, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x966320b, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x966320b, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x966320b, 0x9503366, 0x9db32b8, 0x3000010}, +{0x3000000, 0x966320b, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0x966320b, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x966320b, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x966320b, 0xaab4d7d8, 0xaab4d7d8, 0x3000010}, +{0x3000000, 0x966320b, 0x966320b, 0x9e6320b, 0x3000000}, +{0x3000000, 0x966320b, 0xb26bddee, 0xb26bddee, 0x3000010}, +{0x3000000, 0x966320b, 0xb5c8e5d3, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0x966320b, 0x317285d3, 0x317285d3, 0x3000010}, +{0x3000000, 0x966320b, 0x3c9623b1, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x966320b, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x966320b, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0xb26bddee, 0x0, 0xb26bddee, 0x3000000}, +{0x3000000, 0xb26bddee, 0x1, 0xb26bddee, 0x3000080}, +{0x3000000, 0xb26bddee, 0x76, 0xb26bddee, 0x3000080}, +{0x3000000, 0xb26bddee, 0x2b94, 0xb26bddee, 0x3000080}, +{0x3000000, 0xb26bddee, 0x636d24, 0xb26bddee, 0x3000080}, +{0x3000000, 0xb26bddee, 0x7fffff, 0xb26bddee, 0x3000080}, +{0x3000000, 0xb26bddee, 0x800000, 0xb26bddee, 0x3000010}, +{0x3000000, 0xb26bddee, 0x800002, 0xb26bddee, 0x3000010}, +{0x3000000, 0xb26bddee, 0x1398437, 0xb26bddee, 0x3000010}, +{0x3000000, 0xb26bddee, 0xba98d27, 0xb26bddee, 0x3000010}, +{0x3000000, 0xb26bddee, 0xba98d7a, 0xb26bddee, 0x3000010}, +{0x3000000, 0xb26bddee, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0xb26bddee, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0xb26bddee, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0xb26bddee, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0xb26bddee, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xb26bddee, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xb26bddee, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xb26bddee, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xb26bddee, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xb26bddee, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xb26bddee, 0x80000000, 0xb26bddee, 0x3000000}, +{0x3000000, 0xb26bddee, 0x80000001, 0xb26bddee, 0x3000080}, +{0x3000000, 0xb26bddee, 0x80000076, 0xb26bddee, 0x3000080}, +{0x3000000, 0xb26bddee, 0x80002b94, 0xb26bddee, 0x3000080}, +{0x3000000, 0xb26bddee, 0x80636d24, 0xb26bddee, 0x3000080}, +{0x3000000, 0xb26bddee, 0x807fffff, 0xb26bddee, 0x3000080}, +{0x3000000, 0xb26bddee, 0x80800000, 0xb26bddee, 0x3000010}, +{0x3000000, 0xb26bddee, 0x80800002, 0xb26bddee, 0x3000010}, +{0x3000000, 0xb26bddee, 0x81398437, 0xb26bddee, 0x3000010}, +{0x3000000, 0xb26bddee, 0x8ba98d27, 0xb26bddee, 0x3000010}, +{0x3000000, 0xb26bddee, 0x8ba98d7a, 0xb26bddee, 0x3000010}, +{0x3000000, 0xb26bddee, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0xb26bddee, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xb26bddee, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0xb26bddee, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0xb26bddee, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xb26bddee, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xb26bddee, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xb26bddee, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xb26bddee, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xb26bddee, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xb26bddee, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0xb26bddee, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0xb26bddee, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0xb26bddee, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0xb26bddee, 0x9503366, 0xb26bddee, 0x3000010}, +{0x3000000, 0xb26bddee, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0xb26bddee, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xb26bddee, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0xb26bddee, 0xaab4d7d8, 0xb26bdf58, 0x3000010}, +{0x3000000, 0xb26bddee, 0x966320b, 0xb26bddee, 0x3000010}, +{0x3000000, 0xb26bddee, 0xb26bddee, 0xb2ebddee, 0x3000000}, +{0x3000000, 0xb26bddee, 0xb5c8e5d3, 0xb5cabd8f, 0x3000010}, +{0x3000000, 0xb26bddee, 0x317285d3, 0xb22f3c79, 0x3000010}, +{0x3000000, 0xb26bddee, 0x3c9623b1, 0x3c9623aa, 0x3000010}, +{0x3000000, 0xb26bddee, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0xb26bddee, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x0, 0xb5c8e5d3, 0x3000000}, +{0x3000000, 0xb5c8e5d3, 0x1, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0xb5c8e5d3, 0x76, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0xb5c8e5d3, 0x2b94, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0xb5c8e5d3, 0x636d24, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0xb5c8e5d3, 0x7fffff, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0xb5c8e5d3, 0x800000, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x800002, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x1398437, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0xba98d27, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0xba98d7a, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0xb5c8e5d3, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xb5c8e5d3, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xb5c8e5d3, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xb5c8e5d3, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xb5c8e5d3, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xb5c8e5d3, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xb5c8e5d3, 0x80000000, 0xb5c8e5d3, 0x3000000}, +{0x3000000, 0xb5c8e5d3, 0x80000001, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0xb5c8e5d3, 0x80000076, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0xb5c8e5d3, 0x80002b94, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0xb5c8e5d3, 0x80636d24, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0xb5c8e5d3, 0x807fffff, 0xb5c8e5d3, 0x3000080}, +{0x3000000, 0xb5c8e5d3, 0x80800000, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x80800002, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x81398437, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x8ba98d27, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x8ba98d7a, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0xb5c8e5d3, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0xb5c8e5d3, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0xb5c8e5d3, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0xb5c8e5d3, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0xb5c8e5d3, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0xb5c8e5d3, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0xb5c8e5d3, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x9503366, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0xbf5a97c9, 0xbf5a97e2, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0xaab4d7d8, 0xb5c8e5d6, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x966320b, 0xb5c8e5d3, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0xb26bddee, 0xb5cabd8f, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0xb5c8e5d3, 0xb648e5d3, 0x3000000}, +{0x3000000, 0xb5c8e5d3, 0x317285d3, 0xb5c86c90, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x3c9623b1, 0x3c96208d, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0xb5c8e5d3, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x317285d3, 0x0, 0x317285d3, 0x3000000}, +{0x3000000, 0x317285d3, 0x1, 0x317285d3, 0x3000080}, +{0x3000000, 0x317285d3, 0x76, 0x317285d3, 0x3000080}, +{0x3000000, 0x317285d3, 0x2b94, 0x317285d3, 0x3000080}, +{0x3000000, 0x317285d3, 0x636d24, 0x317285d3, 0x3000080}, +{0x3000000, 0x317285d3, 0x7fffff, 0x317285d3, 0x3000080}, +{0x3000000, 0x317285d3, 0x800000, 0x317285d3, 0x3000010}, +{0x3000000, 0x317285d3, 0x800002, 0x317285d3, 0x3000010}, +{0x3000000, 0x317285d3, 0x1398437, 0x317285d3, 0x3000010}, +{0x3000000, 0x317285d3, 0xba98d27, 0x317285d3, 0x3000010}, +{0x3000000, 0x317285d3, 0xba98d7a, 0x317285d3, 0x3000010}, +{0x3000000, 0x317285d3, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x317285d3, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x317285d3, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x317285d3, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x317285d3, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x317285d3, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x317285d3, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x317285d3, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x317285d3, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x317285d3, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x317285d3, 0x80000000, 0x317285d3, 0x3000000}, +{0x3000000, 0x317285d3, 0x80000001, 0x317285d3, 0x3000080}, +{0x3000000, 0x317285d3, 0x80000076, 0x317285d3, 0x3000080}, +{0x3000000, 0x317285d3, 0x80002b94, 0x317285d3, 0x3000080}, +{0x3000000, 0x317285d3, 0x80636d24, 0x317285d3, 0x3000080}, +{0x3000000, 0x317285d3, 0x807fffff, 0x317285d3, 0x3000080}, +{0x3000000, 0x317285d3, 0x80800000, 0x317285d3, 0x3000010}, +{0x3000000, 0x317285d3, 0x80800002, 0x317285d3, 0x3000010}, +{0x3000000, 0x317285d3, 0x81398437, 0x317285d3, 0x3000010}, +{0x3000000, 0x317285d3, 0x8ba98d27, 0x317285d3, 0x3000010}, +{0x3000000, 0x317285d3, 0x8ba98d7a, 0x317285d3, 0x3000010}, +{0x3000000, 0x317285d3, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x317285d3, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x317285d3, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x317285d3, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x317285d3, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x317285d3, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x317285d3, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x317285d3, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x317285d3, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x317285d3, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x317285d3, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x317285d3, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x317285d3, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x317285d3, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x317285d3, 0x9503366, 0x317285d3, 0x3000010}, +{0x3000000, 0x317285d3, 0xbf5a97c9, 0xbf5a97c9, 0x3000010}, +{0x3000000, 0x317285d3, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x317285d3, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x317285d3, 0xaab4d7d8, 0x3172802c, 0x3000010}, +{0x3000000, 0x317285d3, 0x966320b, 0x317285d3, 0x3000010}, +{0x3000000, 0x317285d3, 0xb26bddee, 0xb22f3c79, 0x3000010}, +{0x3000000, 0x317285d3, 0xb5c8e5d3, 0xb5c86c90, 0x3000010}, +{0x3000000, 0x317285d3, 0x317285d3, 0x31f285d3, 0x3000000}, +{0x3000000, 0x317285d3, 0x3c9623b1, 0x3c9623b3, 0x3000010}, +{0x3000000, 0x317285d3, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x317285d3, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x0, 0x3c9623b1, 0x3000000}, +{0x3000000, 0x3c9623b1, 0x1, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x3c9623b1, 0x76, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x3c9623b1, 0x2b94, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x3c9623b1, 0x636d24, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x3c9623b1, 0x7fffff, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x3c9623b1, 0x800000, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x800002, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x1398437, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0xba98d27, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0xba98d7a, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x3c9623b1, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x3c9623b1, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x3c9623b1, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x3c9623b1, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x3c9623b1, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x3c9623b1, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x3c9623b1, 0x80000000, 0x3c9623b1, 0x3000000}, +{0x3000000, 0x3c9623b1, 0x80000001, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x3c9623b1, 0x80000076, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x3c9623b1, 0x80002b94, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x3c9623b1, 0x80636d24, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x3c9623b1, 0x807fffff, 0x3c9623b1, 0x3000080}, +{0x3000000, 0x3c9623b1, 0x80800000, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x80800002, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x81398437, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x8ba98d27, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x8ba98d7a, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x3c9623b1, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x3c9623b1, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x3c9623b1, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x3c9623b1, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x3c9623b1, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x3c9623b1, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x3c9623b1, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x3c9623b1, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x3c9623b1, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x3c9623b1, 0x4f3495cb, 0x4f3495cb, 0x3000010}, +{0x3000000, 0x3c9623b1, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x9503366, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0xbf5a97c9, 0xbf55e6ab, 0x3000010}, +{0x3000000, 0x3c9623b1, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x3c9623b1, 0xaab4d7d8, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x966320b, 0x3c9623b1, 0x3000010}, +{0x3000000, 0x3c9623b1, 0xb26bddee, 0x3c9623aa, 0x3000010}, +{0x3000000, 0x3c9623b1, 0xb5c8e5d3, 0x3c96208d, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x317285d3, 0x3c9623b3, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x3c9623b1, 0x3d1623b1, 0x3000000}, +{0x3000000, 0x3c9623b1, 0x51fd2c7c, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x3c9623b1, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x0, 0x51fd2c7c, 0x3000000}, +{0x3000000, 0x51fd2c7c, 0x1, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x51fd2c7c, 0x76, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x51fd2c7c, 0x2b94, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x51fd2c7c, 0x636d24, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x51fd2c7c, 0x7fffff, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x51fd2c7c, 0x800000, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x800002, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x1398437, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0xba98d27, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0xba98d7a, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x751f853a, 0x751f853a, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x7f7ffff0, 0x7f7ffff0, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x7f7fffff, 0x7f7fffff, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x51fd2c7c, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x51fd2c7c, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x51fd2c7c, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x51fd2c7c, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x51fd2c7c, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x51fd2c7c, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x51fd2c7c, 0x80000000, 0x51fd2c7c, 0x3000000}, +{0x3000000, 0x51fd2c7c, 0x80000001, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x51fd2c7c, 0x80000076, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x51fd2c7c, 0x80002b94, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x51fd2c7c, 0x80636d24, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x51fd2c7c, 0x807fffff, 0x51fd2c7c, 0x3000080}, +{0x3000000, 0x51fd2c7c, 0x80800000, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x80800002, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x81398437, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x8ba98d27, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x8ba98d7a, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0xf51f853a, 0xf51f853a, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0xff7ffff0, 0xff7ffff0, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0xff7fffff, 0xff7fffff, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x51fd2c7c, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x51fd2c7c, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x51fd2c7c, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x51fd2c7c, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x51fd2c7c, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x51fd2c7c, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x51fd2c7c, 0x4f3495cb, 0x52016895, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0xe73a5134, 0xe73a5134, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x7c994e9e, 0x7c994e9e, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x6164bd6c, 0x6164bd6c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x9503366, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0xbf5a97c9, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0xe6ff1a14, 0xe6ff1a14, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x77f31e2f, 0x77f31e2f, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0xaab4d7d8, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x966320b, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0xb26bddee, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0xb5c8e5d3, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x317285d3, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x3c9623b1, 0x51fd2c7c, 0x3000010}, +{0x3000000, 0x51fd2c7c, 0x51fd2c7c, 0x527d2c7c, 0x3000000}, +{0x3000000, 0x51fd2c7c, 0x7b906a6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x0, 0x7b906a6c, 0x3000000}, +{0x3000000, 0x7b906a6c, 0x1, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x7b906a6c, 0x76, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x7b906a6c, 0x2b94, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x7b906a6c, 0x636d24, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x7b906a6c, 0x7fffff, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x7b906a6c, 0x800000, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x800002, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x1398437, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0xba98d27, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0xba98d7a, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x751f853a, 0x7b906f68, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x7f7ffff0, 0x7f800000, 0x3000014}, +{0x3000000, 0x7b906a6c, 0x7f7fffff, 0x7f800000, 0x3000014}, +{0x3000000, 0x7b906a6c, 0x7f800000, 0x7f800000, 0x3000000}, +{0x3000000, 0x7b906a6c, 0x7f800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7b906a6c, 0x7f984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7b906a6c, 0x7fbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7b906a6c, 0x7fc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7b906a6c, 0x7fd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7b906a6c, 0x7fffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7b906a6c, 0x80000000, 0x7b906a6c, 0x3000000}, +{0x3000000, 0x7b906a6c, 0x80000001, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x7b906a6c, 0x80000076, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x7b906a6c, 0x80002b94, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x7b906a6c, 0x80636d24, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x7b906a6c, 0x807fffff, 0x7b906a6c, 0x3000080}, +{0x3000000, 0x7b906a6c, 0x80800000, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x80800002, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x81398437, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x8ba98d27, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x8ba98d7a, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0xf51f853a, 0x7b906570, 0x3000010}, +{0x3000000, 0x7b906a6c, 0xff7ffff0, 0xff7edf1b, 0x3000010}, +{0x3000000, 0x7b906a6c, 0xff7fffff, 0xff7edf2a, 0x3000010}, +{0x3000000, 0x7b906a6c, 0xff800000, 0xff800000, 0x3000000}, +{0x3000000, 0x7b906a6c, 0xff800001, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7b906a6c, 0xff984a37, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7b906a6c, 0xffbfffff, 0x7fc00000, 0x3000001}, +{0x3000000, 0x7b906a6c, 0xffc00000, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7b906a6c, 0xffd9ba98, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7b906a6c, 0xffffffff, 0x7fc00000, 0x3000000}, +{0x3000000, 0x7b906a6c, 0x4f3495cb, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0xe73a5134, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x7c994e9e, 0x7cbd6939, 0x3000000}, +{0x3000000, 0x7b906a6c, 0x6164bd6c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x9503366, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0xbf5a97c9, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0xe6ff1a14, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x77f31e2f, 0x7b915d8a, 0x3000010}, +{0x3000000, 0x7b906a6c, 0xaab4d7d8, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x966320b, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0xb26bddee, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0xb5c8e5d3, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x317285d3, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x3c9623b1, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x51fd2c7c, 0x7b906a6c, 0x3000010}, +{0x3000000, 0x7b906a6c, 0x7b906a6c, 0x7c106a6c, 0x3000000}, From 718423e506da5e08384770ea06634f34c9e0657f Mon Sep 17 00:00:00 2001 From: B3n30 Date: Wed, 26 Jul 2017 21:06:40 +0200 Subject: [PATCH 036/195] Network: Moved NintendoOUI initalization to RoomMember constructor --- src/network/room.cpp | 5 +++-- src/network/room.h | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/network/room.cpp b/src/network/room.cpp index 8b7915bb70..fbbaf8b93a 100644 --- a/src/network/room.cpp +++ b/src/network/room.cpp @@ -19,7 +19,7 @@ static constexpr u32 MaxConcurrentConnections = 10; class Room::RoomImpl { public: // This MAC address is used to generate a 'Nintendo' like Mac address. - const MacAddress NintendoOUI = {0x00, 0x1F, 0x32, 0x00, 0x00, 0x00}; + const MacAddress NintendoOUI; std::mt19937 random_gen; ///< Random number generator. Used for GenerateMacAddress ENetHost* server = nullptr; ///< Network interface. @@ -36,7 +36,8 @@ public: using MemberList = std::vector; MemberList members; ///< Information about the members of this room. - RoomImpl() : random_gen(std::random_device()()) {} + RoomImpl() + : random_gen(std::random_device()()), NintendoOUI{0x00, 0x1F, 0x32, 0x00, 0x00, 0x00} {} /// Thread that receives and dispatches network packets std::unique_ptr room_thread; diff --git a/src/network/room.h b/src/network/room.h index 54cccf0ae3..65b0d008a1 100644 --- a/src/network/room.h +++ b/src/network/room.h @@ -24,7 +24,7 @@ struct RoomInformation { using MacAddress = std::array; /// A special MAC address that tells the room we're joining to assign us a MAC address /// automatically. -const MacAddress NoPreferredMac = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; +constexpr MacAddress NoPreferredMac = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; // 802.11 broadcast MAC address constexpr MacAddress BroadcastMac = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF}; From c89f804a01ef4c54de6051c3ce8c70d7e66812b0 Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 27 Jul 2017 13:48:27 +0300 Subject: [PATCH 037/195] pica/shader_interpreter: fix off-by-one in LOOP --- src/video_core/shader/shader_interpreter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video_core/shader/shader_interpreter.cpp b/src/video_core/shader/shader_interpreter.cpp index aa1cec81ff..206c0978ad 100644 --- a/src/video_core/shader/shader_interpreter.cpp +++ b/src/video_core/shader/shader_interpreter.cpp @@ -631,7 +631,7 @@ static void RunInterpreter(const ShaderSetup& setup, UnitState& state, DebugData state.address_registers[2] = loop_param.y; Record(debug_data, iteration, loop_param); - call(program_counter + 1, instr.flow_control.dest_offset - program_counter + 1, + call(program_counter + 1, instr.flow_control.dest_offset - program_counter, instr.flow_control.dest_offset + 1, loop_param.x, loop_param.z); break; } From a7dae7fd70baaf6b05668d4c14ce99dc54044159 Mon Sep 17 00:00:00 2001 From: j-selby Date: Thu, 27 Jul 2017 14:29:33 +1000 Subject: [PATCH 038/195] Produce 7zip artifacts on Travis and Appveyor --- .travis-deps.sh | 2 +- .travis-upload.sh | 5 +++++ .travis.yml | 3 ++- appveyor.yml | 15 +++++++++++++-- 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/.travis-deps.sh b/.travis-deps.sh index 4518869845..25a287c7fc 100755 --- a/.travis-deps.sh +++ b/.travis-deps.sh @@ -36,5 +36,5 @@ if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then elif [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update - brew install qt5 sdl2 dylibbundler + brew install qt5 sdl2 dylibbundler p7zip fi diff --git a/.travis-upload.sh b/.travis-upload.sh index 2cc968298f..8cfab31cbd 100755 --- a/.travis-upload.sh +++ b/.travis-upload.sh @@ -124,6 +124,11 @@ EOL tar $COMPRESSION_FLAGS "$ARCHIVE_NAME" "$REV_NAME" + mv "$REV_NAME" nightly + + 7z a "$REV_NAME.7z" nightly + # move the compiled archive into the artifacts directory to be uploaded by travis releases mv "$ARCHIVE_NAME" artifacts/ + mv "$REV_NAME.7z" artifacts/ fi diff --git a/.travis.yml b/.travis.yml index cdb638f7a2..8467588817 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,7 @@ addons: - libqt5opengl5-dev - xorg-dev - lib32stdc++6 # For CMake + - p7zip-full cache: directories: @@ -33,7 +34,7 @@ deploy: api_key: secure: Mck15DIWaJdxDiS3aYVlM9N3G6y8VKUI1rnwII7/iolfm1s94U+tgvbheZDmT7SSbFyaGaYO/E8HrV/uZR9Vvs7ev20sHsTN1u60OTWfDIIyHs9SqjhcGbtq95m9/dMFschOYqTOR+gAs5BsxjuoeAotHdhpQEwvkO2oo5oR0zhGy45gjFnVvtcxT/IfpZBIpVgcK3aLb9zT6ekcJbSiPmEB15iLq3xXd0nFUNtEZdX3D6Veye4n5jB6n72qN8JVoKvPZAwaC2K0pZxpcGJaXDchLsw1q+4eCvdz6UJfUemeQ/uMAmjfeQ3wrzYGXe3nCM3WmX5wosCsB0mw4zYatzl3si6CZ1W+0GkV4Rwlx03dfp7v3EeFhTsXYCaXqhwuLZnWOLUik8t9vaSoFUx4nUIRwfO9kAMUJQSpLuHNO2nT01s3GxvqxzczuLQ9he5nGSi0RRodUzDwek1qUp6I4uV3gRHKz4B07YIc1i2fK88NLXjyQ0uLVZ+7Oq1+kgDp6+N7vvXXZ5qZ17tdaysSbKEE0Y8zsoXw7Rk1tPN19vrCS+TSpomNMyQyne1k+I5iZ/qkxPTLAS5qI6Utc2dL3GJdxWRAEfGNO9AIX3GV/jmmKfdcvwGsCYP8hxqs5vLYfgacw3D8NLf1941lQUwavC17jm9EV9g5G3Pn1Cp516E= file_glob: true - file: "artifacts/*.tar.*" + file: "artifacts/*" skip_cleanup: true on: repo: citra-emu/citra-nightly diff --git a/appveyor.yml b/appveyor.yml index 9a6206a8b8..d062a1f3e7 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -37,16 +37,25 @@ after_build: # Where are these spaces coming from? Regardless, let's remove them $MSVC_BUILD_NAME = "citra-windows-msvc-$GITDATE-$GITREV.zip" -replace " ", "" $MSVC_BUILD_PDB = "citra-windows-msvc-$GITDATE-$GITREV-debugsymbols.zip" -replace " ", "" + $MSVC_SEVENZIP = "citra-windows-msvc-$GITDATE-$GITREV.7z" -replace " ", "" $BINTRAY_VERSION = "nightly-$GIT_LONG_HASH" -replace " ", "" # set the build names as env vars so the artifacts can upload them $env:MSVC_BUILD_NAME = $MSVC_BUILD_NAME $env:MSVC_BUILD_PDB = $MSVC_BUILD_PDB + $env:MSVC_SEVENZIP = $MSVC_SEVENZIP $env:GITREV = $GITREV 7z a -tzip $MSVC_BUILD_PDB .\build\bin\release\*.pdb rm .\build\bin\release\*.pdb - 7z a -tzip $MSVC_BUILD_NAME .\build\bin\release\* .\license.txt .\README.md + + mkdir nightly + Copy-Item .\build\bin\release\* -Destination nightly -Recurse + Copy-Item .\license.txt -Destination nightly + Copy-Item .\README.md -Destination nightly + + 7z a -tzip $MSVC_BUILD_NAME nightly\* + 7z a $MSVC_SEVENZIP nightly test_script: - cd build && ctest -VV -C Release && cd .. @@ -58,6 +67,8 @@ artifacts: - path: $(MSVC_BUILD_PDB) name: msvcdebug type: zip + - path: $(MSVC_SEVENZIP) + name: msvcupdate deploy: provider: GitHub @@ -68,7 +79,7 @@ deploy: Short Commit Hash $(GITREV) auth_token: secure: "dbpsMC/MgPKWFNJCXpQl4cR8FYhepkPLjgNp/pRMktZ8oLKTqPYErfreaIxb/4P1" - artifact: msvcbuild + artifact: msvcupdate,msvcbuild draft: false prerelease: false on: From 941a722ff1d862fa7b0c2ba73ff9c003324da281 Mon Sep 17 00:00:00 2001 From: James Date: Mon, 31 Jul 2017 16:59:34 +1000 Subject: [PATCH 039/195] Handle invalid filenames when renaming files/directories --- src/core/file_sys/archive_sdmc.cpp | 41 ++++++++++++++++++++++++-- src/core/file_sys/savedata_archive.cpp | 41 ++++++++++++++++++++++++-- 2 files changed, 78 insertions(+), 4 deletions(-) diff --git a/src/core/file_sys/archive_sdmc.cpp b/src/core/file_sys/archive_sdmc.cpp index 679909d069..fe3dce5d4d 100644 --- a/src/core/file_sys/archive_sdmc.cpp +++ b/src/core/file_sys/archive_sdmc.cpp @@ -121,7 +121,25 @@ ResultCode SDMCArchive::DeleteFile(const Path& path) const { } ResultCode SDMCArchive::RenameFile(const Path& src_path, const Path& dest_path) const { - if (FileUtil::Rename(mount_point + src_path.AsString(), mount_point + dest_path.AsString())) { + const PathParser path_parser_src(src_path); + + // TODO: Verify these return codes with HW + if (!path_parser_src.IsValid()) { + LOG_ERROR(Service_FS, "Invalid src path %s", src_path.DebugStr().c_str()); + return ERROR_INVALID_PATH; + } + + const PathParser path_parser_dest(dest_path); + + if (!path_parser_dest.IsValid()) { + LOG_ERROR(Service_FS, "Invalid dest path %s", dest_path.DebugStr().c_str()); + return ERROR_INVALID_PATH; + } + + const auto src_path_full = path_parser_src.BuildHostPath(mount_point); + const auto dest_path_full = path_parser_dest.BuildHostPath(mount_point); + + if (FileUtil::Rename(src_path_full, dest_path_full)) { return RESULT_SUCCESS; } @@ -260,8 +278,27 @@ ResultCode SDMCArchive::CreateDirectory(const Path& path) const { } ResultCode SDMCArchive::RenameDirectory(const Path& src_path, const Path& dest_path) const { - if (FileUtil::Rename(mount_point + src_path.AsString(), mount_point + dest_path.AsString())) + const PathParser path_parser_src(src_path); + + // TODO: Verify these return codes with HW + if (!path_parser_src.IsValid()) { + LOG_ERROR(Service_FS, "Invalid src path %s", src_path.DebugStr().c_str()); + return ERROR_INVALID_PATH; + } + + const PathParser path_parser_dest(dest_path); + + if (!path_parser_dest.IsValid()) { + LOG_ERROR(Service_FS, "Invalid dest path %s", dest_path.DebugStr().c_str()); + return ERROR_INVALID_PATH; + } + + const auto src_path_full = path_parser_src.BuildHostPath(mount_point); + const auto dest_path_full = path_parser_dest.BuildHostPath(mount_point); + + if (FileUtil::Rename(src_path_full, dest_path_full)) { return RESULT_SUCCESS; + } // TODO(yuriks): This code probably isn't right, it'll return a Status even if the file didn't // exist or similar. Verify. diff --git a/src/core/file_sys/savedata_archive.cpp b/src/core/file_sys/savedata_archive.cpp index f540c4a931..f8f811ba0e 100644 --- a/src/core/file_sys/savedata_archive.cpp +++ b/src/core/file_sys/savedata_archive.cpp @@ -106,7 +106,25 @@ ResultCode SaveDataArchive::DeleteFile(const Path& path) const { } ResultCode SaveDataArchive::RenameFile(const Path& src_path, const Path& dest_path) const { - if (FileUtil::Rename(mount_point + src_path.AsString(), mount_point + dest_path.AsString())) { + const PathParser path_parser_src(src_path); + + // TODO: Verify these return codes with HW + if (!path_parser_src.IsValid()) { + LOG_ERROR(Service_FS, "Invalid src path %s", src_path.DebugStr().c_str()); + return ERROR_INVALID_PATH; + } + + const PathParser path_parser_dest(dest_path); + + if (!path_parser_dest.IsValid()) { + LOG_ERROR(Service_FS, "Invalid dest path %s", dest_path.DebugStr().c_str()); + return ERROR_INVALID_PATH; + } + + const auto src_path_full = path_parser_src.BuildHostPath(mount_point); + const auto dest_path_full = path_parser_dest.BuildHostPath(mount_point); + + if (FileUtil::Rename(src_path_full, dest_path_full)) { return RESULT_SUCCESS; } @@ -247,8 +265,27 @@ ResultCode SaveDataArchive::CreateDirectory(const Path& path) const { } ResultCode SaveDataArchive::RenameDirectory(const Path& src_path, const Path& dest_path) const { - if (FileUtil::Rename(mount_point + src_path.AsString(), mount_point + dest_path.AsString())) + const PathParser path_parser_src(src_path); + + // TODO: Verify these return codes with HW + if (!path_parser_src.IsValid()) { + LOG_ERROR(Service_FS, "Invalid src path %s", src_path.DebugStr().c_str()); + return ERROR_INVALID_PATH; + } + + const PathParser path_parser_dest(dest_path); + + if (!path_parser_dest.IsValid()) { + LOG_ERROR(Service_FS, "Invalid dest path %s", dest_path.DebugStr().c_str()); + return ERROR_INVALID_PATH; + } + + const auto src_path_full = path_parser_src.BuildHostPath(mount_point); + const auto dest_path_full = path_parser_dest.BuildHostPath(mount_point); + + if (FileUtil::Rename(src_path_full, dest_path_full)) { return RESULT_SUCCESS; + } // TODO(yuriks): This code probably isn't right, it'll return a Status even if the file didn't // exist or similar. Verify. From c59ed47608367de8cd5e4e6d58da02dee30810a9 Mon Sep 17 00:00:00 2001 From: wwylele Date: Wed, 2 Aug 2017 22:05:53 +0300 Subject: [PATCH 040/195] SwRasterizer/Lighting: move quaternion normalization to the caller --- src/video_core/swrasterizer/rasterizer.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 37d1313cf8..80ecf72ec8 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -141,7 +141,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( } // Use the normalized the quaternion when performing the rotation - auto normal = Math::QuaternionRotate(normquat.Normalized(), surface_normal); + auto normal = Math::QuaternionRotate(normquat, surface_normal); Math::Vec4 diffuse_sum = {0.0f, 0.0f, 0.0f, 1.0f}; Math::Vec4 specular_sum = {0.0f, 0.0f, 0.0f, 1.0f}; @@ -664,12 +664,12 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve Math::Vec4 secondary_fragment_color = {0, 0, 0, 0}; if (!g_state.regs.lighting.disable) { - Math::Quaternion normquat{ + Math::Quaternion normquat = Math::Quaternion{ {GetInterpolatedAttribute(v0.quat.x, v1.quat.x, v2.quat.x).ToFloat32(), GetInterpolatedAttribute(v0.quat.y, v1.quat.y, v2.quat.y).ToFloat32(), GetInterpolatedAttribute(v0.quat.z, v1.quat.z, v2.quat.z).ToFloat32()}, GetInterpolatedAttribute(v0.quat.w, v1.quat.w, v2.quat.w).ToFloat32(), - }; + }.Normalized(); Math::Vec3 view{ GetInterpolatedAttribute(v0.view.x, v1.view.x, v2.view.x).ToFloat32(), From 48b410587116c92339d936ed3b1fd00aba38d6b5 Mon Sep 17 00:00:00 2001 From: wwylele Date: Wed, 2 Aug 2017 22:07:15 +0300 Subject: [PATCH 041/195] SwRasterizer/Lighting: reduce confusion --- src/video_core/swrasterizer/rasterizer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index 80ecf72ec8..aee6309542 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -118,7 +118,7 @@ static std::tuple ConvertCubeCoord(float24 u, float24 v static float LookupLightingLut(const Pica::State::Lighting& lighting, size_t lut_index, u8 index, float delta) { ASSERT_MSG(lut_index < lighting.luts.size(), "Out of range lut"); - ASSERT_MSG(index < lighting.luts[0].size(), "Out of range index"); + ASSERT_MSG(index < lighting.luts[lut_index].size(), "Out of range index"); const auto& lut = lighting.luts[lut_index][index]; From eda28266fb1f0eb96a2096cadb41b62db3dc2d2e Mon Sep 17 00:00:00 2001 From: wwylele Date: Wed, 2 Aug 2017 22:20:40 +0300 Subject: [PATCH 042/195] SwRasterizer/Lighting: move to its own file --- src/video_core/CMakeLists.txt | 2 + .../swrasterizer/fragment_lighting.cpp | 250 ++++++++++++++++++ .../swrasterizer/fragment_lighting.h | 18 ++ src/video_core/swrasterizer/rasterizer.cpp | 241 +---------------- 4 files changed, 271 insertions(+), 240 deletions(-) create mode 100644 src/video_core/swrasterizer/fragment_lighting.cpp create mode 100644 src/video_core/swrasterizer/fragment_lighting.h diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index 0961a3251a..b2280f2efd 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt @@ -14,6 +14,7 @@ set(SRCS shader/shader.cpp shader/shader_interpreter.cpp swrasterizer/clipper.cpp + swrasterizer/fragment_lighting.cpp swrasterizer/framebuffer.cpp swrasterizer/proctex.cpp swrasterizer/rasterizer.cpp @@ -54,6 +55,7 @@ set(HEADERS shader/shader.h shader/shader_interpreter.h swrasterizer/clipper.h + swrasterizer/fragment_lighting.h swrasterizer/framebuffer.h swrasterizer/proctex.h swrasterizer/rasterizer.h diff --git a/src/video_core/swrasterizer/fragment_lighting.cpp b/src/video_core/swrasterizer/fragment_lighting.cpp new file mode 100644 index 0000000000..45a86b5cde --- /dev/null +++ b/src/video_core/swrasterizer/fragment_lighting.cpp @@ -0,0 +1,250 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "common/math_util.h" +#include "video_core/swrasterizer/fragment_lighting.h" + +namespace Pica { + +static float LookupLightingLut(const Pica::State::Lighting& lighting, size_t lut_index, u8 index, + float delta) { + ASSERT_MSG(lut_index < lighting.luts.size(), "Out of range lut"); + ASSERT_MSG(index < lighting.luts[lut_index].size(), "Out of range index"); + + const auto& lut = lighting.luts[lut_index][index]; + + float lut_value = lut.ToFloat(); + float lut_diff = lut.DiffToFloat(); + + return lut_value + lut_diff * delta; +} + +std::tuple, Math::Vec4> ComputeFragmentsColors( + const Pica::LightingRegs& lighting, const Pica::State::Lighting& lighting_state, + const Math::Quaternion& normquat, const Math::Vec3& view) { + + // TODO(Subv): Bump mapping + Math::Vec3 surface_normal = {0.0f, 0.0f, 1.0f}; + + if (lighting.config0.bump_mode != LightingRegs::LightingBumpMode::None) { + LOG_CRITICAL(HW_GPU, "unimplemented bump mapping"); + UNIMPLEMENTED(); + } + + // Use the normalized the quaternion when performing the rotation + auto normal = Math::QuaternionRotate(normquat, surface_normal); + + Math::Vec4 diffuse_sum = {0.0f, 0.0f, 0.0f, 1.0f}; + Math::Vec4 specular_sum = {0.0f, 0.0f, 0.0f, 1.0f}; + + for (unsigned light_index = 0; light_index <= lighting.max_light_index; ++light_index) { + unsigned num = lighting.light_enable.GetNum(light_index); + const auto& light_config = lighting.light[num]; + + Math::Vec3 refl_value = {}; + Math::Vec3 position = {float16::FromRaw(light_config.x).ToFloat32(), + float16::FromRaw(light_config.y).ToFloat32(), + float16::FromRaw(light_config.z).ToFloat32()}; + Math::Vec3 light_vector; + + if (light_config.config.directional) + light_vector = position; + else + light_vector = position + view; + + light_vector.Normalize(); + + float dist_atten = 1.0f; + if (!lighting.IsDistAttenDisabled(num)) { + auto distance = (-view - position).Length(); + float scale = Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32(); + float bias = Pica::float20::FromRaw(light_config.dist_atten_bias).ToFloat32(); + size_t lut = + static_cast(LightingRegs::LightingSampler::DistanceAttenuation) + num; + + float sample_loc = MathUtil::Clamp(scale * distance + bias, 0.0f, 1.0f); + + u8 lutindex = + static_cast(MathUtil::Clamp(std::floor(sample_loc * 256.0f), 0.0f, 255.0f)); + float delta = sample_loc * 256 - lutindex; + dist_atten = LookupLightingLut(lighting_state, lut, lutindex, delta); + } + + auto GetLutValue = [&](LightingRegs::LightingLutInput input, bool abs, + LightingRegs::LightingScale scale_enum, + LightingRegs::LightingSampler sampler) { + Math::Vec3 norm_view = view.Normalized(); + Math::Vec3 half_angle = (norm_view + light_vector).Normalized(); + float result = 0.0f; + + switch (input) { + case LightingRegs::LightingLutInput::NH: + result = Math::Dot(normal, half_angle); + break; + + case LightingRegs::LightingLutInput::VH: + result = Math::Dot(norm_view, half_angle); + break; + + case LightingRegs::LightingLutInput::NV: + result = Math::Dot(normal, norm_view); + break; + + case LightingRegs::LightingLutInput::LN: + result = Math::Dot(light_vector, normal); + break; + + default: + LOG_CRITICAL(HW_GPU, "Unknown lighting LUT input %u\n", static_cast(input)); + UNIMPLEMENTED(); + result = 0.0f; + } + + u8 index; + float delta; + + if (abs) { + if (light_config.config.two_sided_diffuse) + result = std::abs(result); + else + result = std::max(result, 0.0f); + + float flr = std::floor(result * 256.0f); + index = static_cast(MathUtil::Clamp(flr, 0.0f, 255.0f)); + delta = result * 256 - index; + } else { + float flr = std::floor(result * 128.0f); + s8 signed_index = static_cast(MathUtil::Clamp(flr, -128.0f, 127.0f)); + delta = result * 128.0f - signed_index; + index = static_cast(signed_index); + } + + float scale = lighting.lut_scale.GetScale(scale_enum); + return scale * + LookupLightingLut(lighting_state, static_cast(sampler), index, delta); + }; + + // Specular 0 component + float d0_lut_value = 1.0f; + if (lighting.config1.disable_lut_d0 == 0 && + LightingRegs::IsLightingSamplerSupported( + lighting.config0.config, LightingRegs::LightingSampler::Distribution0)) { + d0_lut_value = + GetLutValue(lighting.lut_input.d0, lighting.abs_lut_input.disable_d0 == 0, + lighting.lut_scale.d0, LightingRegs::LightingSampler::Distribution0); + } + + Math::Vec3 specular_0 = d0_lut_value * light_config.specular_0.ToVec3f(); + + // If enabled, lookup ReflectRed value, otherwise, 1.0 is used + if (lighting.config1.disable_lut_rr == 0 && + LightingRegs::IsLightingSamplerSupported(lighting.config0.config, + LightingRegs::LightingSampler::ReflectRed)) { + refl_value.x = + GetLutValue(lighting.lut_input.rr, lighting.abs_lut_input.disable_rr == 0, + lighting.lut_scale.rr, LightingRegs::LightingSampler::ReflectRed); + } else { + refl_value.x = 1.0f; + } + + // If enabled, lookup ReflectGreen value, otherwise, ReflectRed value is used + if (lighting.config1.disable_lut_rg == 0 && + LightingRegs::IsLightingSamplerSupported(lighting.config0.config, + LightingRegs::LightingSampler::ReflectGreen)) { + refl_value.y = + GetLutValue(lighting.lut_input.rg, lighting.abs_lut_input.disable_rg == 0, + lighting.lut_scale.rg, LightingRegs::LightingSampler::ReflectGreen); + } else { + refl_value.y = refl_value.x; + } + + // If enabled, lookup ReflectBlue value, otherwise, ReflectRed value is used + if (lighting.config1.disable_lut_rb == 0 && + LightingRegs::IsLightingSamplerSupported(lighting.config0.config, + LightingRegs::LightingSampler::ReflectBlue)) { + refl_value.z = + GetLutValue(lighting.lut_input.rb, lighting.abs_lut_input.disable_rb == 0, + lighting.lut_scale.rb, LightingRegs::LightingSampler::ReflectBlue); + } else { + refl_value.z = refl_value.x; + } + + // Specular 1 component + float d1_lut_value = 1.0f; + if (lighting.config1.disable_lut_d1 == 0 && + LightingRegs::IsLightingSamplerSupported( + lighting.config0.config, LightingRegs::LightingSampler::Distribution1)) { + d1_lut_value = + GetLutValue(lighting.lut_input.d1, lighting.abs_lut_input.disable_d1 == 0, + lighting.lut_scale.d1, LightingRegs::LightingSampler::Distribution1); + } + + Math::Vec3 specular_1 = + d1_lut_value * refl_value * light_config.specular_1.ToVec3f(); + + // Fresnel + if (lighting.config1.disable_lut_fr == 0 && + LightingRegs::IsLightingSamplerSupported(lighting.config0.config, + LightingRegs::LightingSampler::Fresnel)) { + + float lut_value = + GetLutValue(lighting.lut_input.fr, lighting.abs_lut_input.disable_fr == 0, + lighting.lut_scale.fr, LightingRegs::LightingSampler::Fresnel); + + // Enabled for diffuse lighting alpha component + if (lighting.config0.fresnel_selector == + LightingRegs::LightingFresnelSelector::PrimaryAlpha || + lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { + diffuse_sum.a() *= lut_value; + } + + // Enabled for the specular lighting alpha component + if (lighting.config0.fresnel_selector == + LightingRegs::LightingFresnelSelector::SecondaryAlpha || + lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { + specular_sum.a() *= lut_value; + } + } + + auto dot_product = Math::Dot(light_vector, normal); + + // Calculate clamp highlights before applying the two-sided diffuse configuration to the dot + // product. + float clamp_highlights = 1.0f; + if (lighting.config0.clamp_highlights) { + if (dot_product <= 0.0f) + clamp_highlights = 0.0f; + else + clamp_highlights = 1.0f; + } + + if (light_config.config.two_sided_diffuse) + dot_product = std::abs(dot_product); + else + dot_product = std::max(dot_product, 0.0f); + + auto diffuse = + light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); + diffuse_sum += Math::MakeVec(diffuse * dist_atten, 0.0f); + + specular_sum += + Math::MakeVec((specular_0 + specular_1) * clamp_highlights * dist_atten, 0.0f); + } + + diffuse_sum += Math::MakeVec(lighting.global_ambient.ToVec3f(), 0.0f); + + auto diffuse = Math::MakeVec(MathUtil::Clamp(diffuse_sum.x, 0.0f, 1.0f) * 255, + MathUtil::Clamp(diffuse_sum.y, 0.0f, 1.0f) * 255, + MathUtil::Clamp(diffuse_sum.z, 0.0f, 1.0f) * 255, + MathUtil::Clamp(diffuse_sum.w, 0.0f, 1.0f) * 255) + .Cast(); + auto specular = Math::MakeVec(MathUtil::Clamp(specular_sum.x, 0.0f, 1.0f) * 255, + MathUtil::Clamp(specular_sum.y, 0.0f, 1.0f) * 255, + MathUtil::Clamp(specular_sum.z, 0.0f, 1.0f) * 255, + MathUtil::Clamp(specular_sum.w, 0.0f, 1.0f) * 255) + .Cast(); + return {diffuse, specular}; +} + +} // namespace Pica diff --git a/src/video_core/swrasterizer/fragment_lighting.h b/src/video_core/swrasterizer/fragment_lighting.h new file mode 100644 index 0000000000..438dca926b --- /dev/null +++ b/src/video_core/swrasterizer/fragment_lighting.h @@ -0,0 +1,18 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include "common/quaternion.h" +#include "common/vector_math.h" +#include "video_core/pica_state.h" + +namespace Pica { + +std::tuple, Math::Vec4> ComputeFragmentsColors( + const Pica::LightingRegs& lighting, const Pica::State::Lighting& lighting_state, + const Math::Quaternion& normquat, const Math::Vec3& view); + +} // namespace Pica diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index aee6309542..bc7e1c56cc 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -24,6 +24,7 @@ #include "video_core/regs_rasterizer.h" #include "video_core/regs_texturing.h" #include "video_core/shader/shader.h" +#include "video_core/swrasterizer/fragment_lighting.h" #include "video_core/swrasterizer/framebuffer.h" #include "video_core/swrasterizer/proctex.h" #include "video_core/swrasterizer/rasterizer.h" @@ -115,246 +116,6 @@ static std::tuple ConvertCubeCoord(float24 u, float24 v return std::make_tuple(x / z * half + half, y / z * half + half, addr); } -static float LookupLightingLut(const Pica::State::Lighting& lighting, size_t lut_index, u8 index, - float delta) { - ASSERT_MSG(lut_index < lighting.luts.size(), "Out of range lut"); - ASSERT_MSG(index < lighting.luts[lut_index].size(), "Out of range index"); - - const auto& lut = lighting.luts[lut_index][index]; - - float lut_value = lut.ToFloat(); - float lut_diff = lut.DiffToFloat(); - - return lut_value + lut_diff * delta; -} - -std::tuple, Math::Vec4> ComputeFragmentsColors( - const Pica::LightingRegs& lighting, const Pica::State::Lighting& lighting_state, - const Math::Quaternion& normquat, const Math::Vec3& view) { - - // TODO(Subv): Bump mapping - Math::Vec3 surface_normal = {0.0f, 0.0f, 1.0f}; - - if (lighting.config0.bump_mode != LightingRegs::LightingBumpMode::None) { - LOG_CRITICAL(HW_GPU, "unimplemented bump mapping"); - UNIMPLEMENTED(); - } - - // Use the normalized the quaternion when performing the rotation - auto normal = Math::QuaternionRotate(normquat, surface_normal); - - Math::Vec4 diffuse_sum = {0.0f, 0.0f, 0.0f, 1.0f}; - Math::Vec4 specular_sum = {0.0f, 0.0f, 0.0f, 1.0f}; - - for (unsigned light_index = 0; light_index <= lighting.max_light_index; ++light_index) { - unsigned num = lighting.light_enable.GetNum(light_index); - const auto& light_config = lighting.light[num]; - - Math::Vec3 refl_value = {}; - Math::Vec3 position = {float16::FromRaw(light_config.x).ToFloat32(), - float16::FromRaw(light_config.y).ToFloat32(), - float16::FromRaw(light_config.z).ToFloat32()}; - Math::Vec3 light_vector; - - if (light_config.config.directional) - light_vector = position; - else - light_vector = position + view; - - light_vector.Normalize(); - - float dist_atten = 1.0f; - if (!lighting.IsDistAttenDisabled(num)) { - auto distance = (-view - position).Length(); - float scale = Pica::float20::FromRaw(light_config.dist_atten_scale).ToFloat32(); - float bias = Pica::float20::FromRaw(light_config.dist_atten_bias).ToFloat32(); - size_t lut = - static_cast(LightingRegs::LightingSampler::DistanceAttenuation) + num; - - float sample_loc = MathUtil::Clamp(scale * distance + bias, 0.0f, 1.0f); - - u8 lutindex = - static_cast(MathUtil::Clamp(std::floor(sample_loc * 256.0f), 0.0f, 255.0f)); - float delta = sample_loc * 256 - lutindex; - dist_atten = LookupLightingLut(lighting_state, lut, lutindex, delta); - } - - auto GetLutValue = [&](LightingRegs::LightingLutInput input, bool abs, - LightingRegs::LightingScale scale_enum, - LightingRegs::LightingSampler sampler) { - Math::Vec3 norm_view = view.Normalized(); - Math::Vec3 half_angle = (norm_view + light_vector).Normalized(); - float result = 0.0f; - - switch (input) { - case LightingRegs::LightingLutInput::NH: - result = Math::Dot(normal, half_angle); - break; - - case LightingRegs::LightingLutInput::VH: - result = Math::Dot(norm_view, half_angle); - break; - - case LightingRegs::LightingLutInput::NV: - result = Math::Dot(normal, norm_view); - break; - - case LightingRegs::LightingLutInput::LN: - result = Math::Dot(light_vector, normal); - break; - - default: - LOG_CRITICAL(HW_GPU, "Unknown lighting LUT input %u\n", static_cast(input)); - UNIMPLEMENTED(); - result = 0.0f; - } - - u8 index; - float delta; - - if (abs) { - if (light_config.config.two_sided_diffuse) - result = std::abs(result); - else - result = std::max(result, 0.0f); - - float flr = std::floor(result * 256.0f); - index = static_cast(MathUtil::Clamp(flr, 0.0f, 255.0f)); - delta = result * 256 - index; - } else { - float flr = std::floor(result * 128.0f); - s8 signed_index = static_cast(MathUtil::Clamp(flr, -128.0f, 127.0f)); - delta = result * 128.0f - signed_index; - index = static_cast(signed_index); - } - - float scale = lighting.lut_scale.GetScale(scale_enum); - return scale * - LookupLightingLut(lighting_state, static_cast(sampler), index, delta); - }; - - // Specular 0 component - float d0_lut_value = 1.0f; - if (lighting.config1.disable_lut_d0 == 0 && - LightingRegs::IsLightingSamplerSupported( - lighting.config0.config, LightingRegs::LightingSampler::Distribution0)) { - d0_lut_value = - GetLutValue(lighting.lut_input.d0, lighting.abs_lut_input.disable_d0 == 0, - lighting.lut_scale.d0, LightingRegs::LightingSampler::Distribution0); - } - - Math::Vec3 specular_0 = d0_lut_value * light_config.specular_0.ToVec3f(); - - // If enabled, lookup ReflectRed value, otherwise, 1.0 is used - if (lighting.config1.disable_lut_rr == 0 && - LightingRegs::IsLightingSamplerSupported(lighting.config0.config, - LightingRegs::LightingSampler::ReflectRed)) { - refl_value.x = - GetLutValue(lighting.lut_input.rr, lighting.abs_lut_input.disable_rr == 0, - lighting.lut_scale.rr, LightingRegs::LightingSampler::ReflectRed); - } else { - refl_value.x = 1.0f; - } - - // If enabled, lookup ReflectGreen value, otherwise, ReflectRed value is used - if (lighting.config1.disable_lut_rg == 0 && - LightingRegs::IsLightingSamplerSupported(lighting.config0.config, - LightingRegs::LightingSampler::ReflectGreen)) { - refl_value.y = - GetLutValue(lighting.lut_input.rg, lighting.abs_lut_input.disable_rg == 0, - lighting.lut_scale.rg, LightingRegs::LightingSampler::ReflectGreen); - } else { - refl_value.y = refl_value.x; - } - - // If enabled, lookup ReflectBlue value, otherwise, ReflectRed value is used - if (lighting.config1.disable_lut_rb == 0 && - LightingRegs::IsLightingSamplerSupported(lighting.config0.config, - LightingRegs::LightingSampler::ReflectBlue)) { - refl_value.z = - GetLutValue(lighting.lut_input.rb, lighting.abs_lut_input.disable_rb == 0, - lighting.lut_scale.rb, LightingRegs::LightingSampler::ReflectBlue); - } else { - refl_value.z = refl_value.x; - } - - // Specular 1 component - float d1_lut_value = 1.0f; - if (lighting.config1.disable_lut_d1 == 0 && - LightingRegs::IsLightingSamplerSupported( - lighting.config0.config, LightingRegs::LightingSampler::Distribution1)) { - d1_lut_value = - GetLutValue(lighting.lut_input.d1, lighting.abs_lut_input.disable_d1 == 0, - lighting.lut_scale.d1, LightingRegs::LightingSampler::Distribution1); - } - - Math::Vec3 specular_1 = - d1_lut_value * refl_value * light_config.specular_1.ToVec3f(); - - // Fresnel - if (lighting.config1.disable_lut_fr == 0 && - LightingRegs::IsLightingSamplerSupported(lighting.config0.config, - LightingRegs::LightingSampler::Fresnel)) { - - float lut_value = - GetLutValue(lighting.lut_input.fr, lighting.abs_lut_input.disable_fr == 0, - lighting.lut_scale.fr, LightingRegs::LightingSampler::Fresnel); - - // Enabled for diffuse lighting alpha component - if (lighting.config0.fresnel_selector == - LightingRegs::LightingFresnelSelector::PrimaryAlpha || - lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { - diffuse_sum.a() *= lut_value; - } - - // Enabled for the specular lighting alpha component - if (lighting.config0.fresnel_selector == - LightingRegs::LightingFresnelSelector::SecondaryAlpha || - lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { - specular_sum.a() *= lut_value; - } - } - - auto dot_product = Math::Dot(light_vector, normal); - - // Calculate clamp highlights before applying the two-sided diffuse configuration to the dot - // product. - float clamp_highlights = 1.0f; - if (lighting.config0.clamp_highlights) { - if (dot_product <= 0.0f) - clamp_highlights = 0.0f; - else - clamp_highlights = 1.0f; - } - - if (light_config.config.two_sided_diffuse) - dot_product = std::abs(dot_product); - else - dot_product = std::max(dot_product, 0.0f); - - auto diffuse = - light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); - diffuse_sum += Math::MakeVec(diffuse * dist_atten, 0.0f); - - specular_sum += - Math::MakeVec((specular_0 + specular_1) * clamp_highlights * dist_atten, 0.0f); - } - - diffuse_sum += Math::MakeVec(lighting.global_ambient.ToVec3f(), 0.0f); - - auto diffuse = Math::MakeVec(MathUtil::Clamp(diffuse_sum.x, 0.0f, 1.0f) * 255, - MathUtil::Clamp(diffuse_sum.y, 0.0f, 1.0f) * 255, - MathUtil::Clamp(diffuse_sum.z, 0.0f, 1.0f) * 255, - MathUtil::Clamp(diffuse_sum.w, 0.0f, 1.0f) * 255) - .Cast(); - auto specular = Math::MakeVec(MathUtil::Clamp(specular_sum.x, 0.0f, 1.0f) * 255, - MathUtil::Clamp(specular_sum.y, 0.0f, 1.0f) * 255, - MathUtil::Clamp(specular_sum.z, 0.0f, 1.0f) * 255, - MathUtil::Clamp(specular_sum.w, 0.0f, 1.0f) * 255) - .Cast(); - return {diffuse, specular}; -} - MICROPROFILE_DEFINE(GPU_Rasterization, "GPU", "Rasterization", MP_RGB(50, 50, 240)); /** From 2252a63f8036cdf2612243271ce29e6104f82825 Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 3 Aug 2017 12:01:31 +0300 Subject: [PATCH 043/195] SwRasterizer/Lighting: shorten file name --- src/video_core/CMakeLists.txt | 4 ++-- .../swrasterizer/{fragment_lighting.cpp => lighting.cpp} | 2 +- .../swrasterizer/{fragment_lighting.h => lighting.h} | 0 src/video_core/swrasterizer/rasterizer.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename src/video_core/swrasterizer/{fragment_lighting.cpp => lighting.cpp} (99%) rename src/video_core/swrasterizer/{fragment_lighting.h => lighting.h} (100%) diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index b2280f2efd..cffa4c9523 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt @@ -14,8 +14,8 @@ set(SRCS shader/shader.cpp shader/shader_interpreter.cpp swrasterizer/clipper.cpp - swrasterizer/fragment_lighting.cpp swrasterizer/framebuffer.cpp + swrasterizer/lighting.cpp swrasterizer/proctex.cpp swrasterizer/rasterizer.cpp swrasterizer/swrasterizer.cpp @@ -55,8 +55,8 @@ set(HEADERS shader/shader.h shader/shader_interpreter.h swrasterizer/clipper.h - swrasterizer/fragment_lighting.h swrasterizer/framebuffer.h + swrasterizer/lighting.h swrasterizer/proctex.h swrasterizer/rasterizer.h swrasterizer/swrasterizer.h diff --git a/src/video_core/swrasterizer/fragment_lighting.cpp b/src/video_core/swrasterizer/lighting.cpp similarity index 99% rename from src/video_core/swrasterizer/fragment_lighting.cpp rename to src/video_core/swrasterizer/lighting.cpp index 45a86b5cde..63088eee8c 100644 --- a/src/video_core/swrasterizer/fragment_lighting.cpp +++ b/src/video_core/swrasterizer/lighting.cpp @@ -3,7 +3,7 @@ // Refer to the license.txt file included. #include "common/math_util.h" -#include "video_core/swrasterizer/fragment_lighting.h" +#include "video_core/swrasterizer/lighting.h" namespace Pica { diff --git a/src/video_core/swrasterizer/fragment_lighting.h b/src/video_core/swrasterizer/lighting.h similarity index 100% rename from src/video_core/swrasterizer/fragment_lighting.h rename to src/video_core/swrasterizer/lighting.h diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index bc7e1c56cc..fdc1df1993 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -24,8 +24,8 @@ #include "video_core/regs_rasterizer.h" #include "video_core/regs_texturing.h" #include "video_core/shader/shader.h" -#include "video_core/swrasterizer/fragment_lighting.h" #include "video_core/swrasterizer/framebuffer.h" +#include "video_core/swrasterizer/lighting.h" #include "video_core/swrasterizer/proctex.h" #include "video_core/swrasterizer/rasterizer.h" #include "video_core/swrasterizer/texturing.h" From f5cf9960d9eb5ff5afb39c0356f42035e2dd1ccf Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 1 Aug 2017 19:51:44 -0400 Subject: [PATCH 044/195] loader: Expose program title. --- src/core/loader/loader.h | 9 +++++++++ src/core/loader/ncch.cpp | 20 ++++++++++++++++++++ src/core/loader/ncch.h | 14 ++------------ 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h index 48bbf687dd..e731888a27 100644 --- a/src/core/loader/loader.h +++ b/src/core/loader/loader.h @@ -166,6 +166,15 @@ public: return ResultStatus::ErrorNotImplemented; } + /** + * Get the title of the application + * @param title Reference to store the application title into + * @return ResultStatus result of function + */ + virtual ResultStatus ReadTitle(std::string& title) { + return ResultStatus::ErrorNotImplemented; + } + protected: FileUtil::IOFile file; bool is_loaded = false; diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index fc4d14a595..c007069a9e 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -4,7 +4,9 @@ #include #include +#include #include +#include #include #include "common/logging/log.h" #include "common/string_util.h" @@ -420,4 +422,22 @@ ResultStatus AppLoader_NCCH::ReadRomFS(std::shared_ptr& romfs_ return ResultStatus::ErrorNotUsed; } +ResultStatus AppLoader_NCCH::ReadTitle(std::string& title) { + std::vector data; + Loader::SMDH smdh; + ReadIcon(data); + + if (!Loader::IsValidSMDH(data)) { + return ResultStatus::ErrorInvalidFormat; + } + + memcpy(&smdh, data.data(), sizeof(Loader::SMDH)); + + const auto& short_title = smdh.GetShortTitle(SMDH::TitleLanguage::English); + auto title_end = std::find(short_title.begin(), short_title.end(), u'\0'); + title = Common::UTF16ToUTF8(std::u16string{short_title.begin(), title_end}); + + return ResultStatus::Success; +} + } // namespace Loader diff --git a/src/core/loader/ncch.h b/src/core/loader/ncch.h index 0ebd47fd5c..e40cef7649 100644 --- a/src/core/loader/ncch.h +++ b/src/core/loader/ncch.h @@ -191,23 +191,13 @@ public: ResultStatus ReadLogo(std::vector& buffer) override; - /** - * Get the program id of the application - * @param out_program_id Reference to store program id into - * @return ResultStatus result of function - */ ResultStatus ReadProgramId(u64& out_program_id) override; - /** - * Get the RomFS of the application - * @param romfs_file Reference to buffer to store data - * @param offset Offset in the file to the RomFS - * @param size Size of the RomFS in bytes - * @return ResultStatus result of function - */ ResultStatus ReadRomFS(std::shared_ptr& romfs_file, u64& offset, u64& size) override; + ResultStatus ReadTitle(std::string& title) override; + private: /** * Reads an application ExeFS section of an NCCH file into AppLoader (e.g. .code, .logo, etc.) From 9b8e5bea6619606afe10dfc38b1d8f6a47ba8332 Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 1 Aug 2017 19:53:35 -0400 Subject: [PATCH 045/195] core: Expose AppLoader as a public interface. --- src/core/core.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/core/core.h b/src/core/core.h index 4e3b6b4092..9805cc6941 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -7,6 +7,7 @@ #include #include #include "common/common_types.h" +#include "core/loader/loader.h" #include "core/memory.h" #include "core/perf_stats.h" #include "core/telemetry_session.h" @@ -14,10 +15,6 @@ class EmuWindow; class ARM_Interface; -namespace Loader { -class AppLoader; -} - namespace Core { class System { @@ -119,6 +116,10 @@ public: return status_details; } + Loader::AppLoader& GetAppLoader() const { + return *app_loader; + } + private: /** * Initialize the emulated system. From f44a1e0291ab64ea9f34a9263432f30d18f3e98d Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 1 Aug 2017 19:54:24 -0400 Subject: [PATCH 046/195] common: Add build timestamp to scm_rev. --- CMakeLists.txt | 9 ++++++++- src/common/scm_rev.cpp.in | 2 ++ src/common/scm_rev.h | 1 + 3 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 79d8046d9d..ddba04ef93 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -295,11 +295,18 @@ function(create_directory_groups) endforeach() endfunction() -# generate git revision information +# Gets a UTC timstamp and sets the provided variable to it +function(get_timestamp _var) + string(TIMESTAMP timestamp UTC) + set(${_var} "${timestamp}" PARENT_SCOPE) +endfunction() + +# generate git/build information include(GetGitRevisionDescription) get_git_head_revision(GIT_REF_SPEC GIT_REV) git_describe(GIT_DESC --always --long --dirty) git_branch_name(GIT_BRANCH) +get_timestamp(BUILD_DATE) enable_testing() add_subdirectory(externals) diff --git a/src/common/scm_rev.cpp.in b/src/common/scm_rev.cpp.in index 0080db5d5d..4083095d50 100644 --- a/src/common/scm_rev.cpp.in +++ b/src/common/scm_rev.cpp.in @@ -8,6 +8,7 @@ #define GIT_BRANCH "@GIT_BRANCH@" #define GIT_DESC "@GIT_DESC@" #define BUILD_NAME "@REPO_NAME@" +#define BUILD_DATE "@BUILD_DATE@" namespace Common { @@ -15,6 +16,7 @@ const char g_scm_rev[] = GIT_REV; const char g_scm_branch[] = GIT_BRANCH; const char g_scm_desc[] = GIT_DESC; const char g_build_name[] = BUILD_NAME; +const char g_build_date[] = BUILD_DATE; } // namespace diff --git a/src/common/scm_rev.h b/src/common/scm_rev.h index e223898035..18aaa1735d 100644 --- a/src/common/scm_rev.h +++ b/src/common/scm_rev.h @@ -10,5 +10,6 @@ extern const char g_scm_rev[]; extern const char g_scm_branch[]; extern const char g_scm_desc[]; extern const char g_build_name[]; +extern const char g_build_date[]; } // namespace From a621ab68537bec0d9b3e49d29253fa378636a0a1 Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 1 Aug 2017 19:55:48 -0400 Subject: [PATCH 047/195] telemetry_session: Log BuildDate and ProgramName fields. --- src/core/telemetry_session.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index 841d6cfa1b..22462f8203 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp @@ -7,6 +7,7 @@ #include "common/assert.h" #include "common/scm_rev.h" #include "common/x64/cpu_detect.h" +#include "core/core.h" #include "core/settings.h" #include "core/telemetry_session.h" @@ -39,12 +40,18 @@ TelemetrySession::TelemetrySession() { std::chrono::system_clock::now().time_since_epoch()) .count()}; AddField(Telemetry::FieldType::Session, "Init_Time", init_time); + std::string program_name; + const Loader::ResultStatus res{System::GetInstance().GetAppLoader().ReadTitle(program_name)}; + if (res == Loader::ResultStatus::Success) { + AddField(Telemetry::FieldType::Session, "ProgramName", program_name); + } // Log application information const bool is_git_dirty{std::strstr(Common::g_scm_desc, "dirty") != nullptr}; AddField(Telemetry::FieldType::App, "Git_IsDirty", is_git_dirty); AddField(Telemetry::FieldType::App, "Git_Branch", Common::g_scm_branch); AddField(Telemetry::FieldType::App, "Git_Revision", Common::g_scm_rev); + AddField(Telemetry::FieldType::App, "BuildDate", Common::g_build_date); // Log user system information AddField(Telemetry::FieldType::UserSystem, "CPU_Model", Common::GetCPUCaps().cpu_string); From 5c631ec9c50482e8b34d0a6f3496b5beb1648230 Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 1 Aug 2017 20:00:40 -0400 Subject: [PATCH 048/195] telemetry: Add field for RequiresSharedFont. --- src/core/hle/service/apt/apt.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 4e6b7b6f5d..0109fa2b26 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -75,6 +75,10 @@ void Initialize(Service::Interface* self) { void GetSharedFont(Service::Interface* self) { IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x44, 0, 0); // 0x00440000 IPC::RequestBuilder rb = rp.MakeBuilder(2, 2); + + // Log in telemetry if the game uses the shared font + Core::Telemetry().AddField(Telemetry::FieldType::Session, "RequiresSharedFont", true); + if (!shared_font_loaded) { LOG_ERROR(Service_APT, "shared font file missing - go dump it from your 3ds"); rb.Push(-1); // TODO: Find the right error code From 9390d54bb3fe3884a37c4d9698d448106bb30a4e Mon Sep 17 00:00:00 2001 From: bunnei Date: Wed, 2 Aug 2017 22:47:50 -0400 Subject: [PATCH 049/195] telemetry: Add field for BuildName. --- src/core/telemetry_session.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index 22462f8203..aca5136233 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp @@ -52,6 +52,7 @@ TelemetrySession::TelemetrySession() { AddField(Telemetry::FieldType::App, "Git_Branch", Common::g_scm_branch); AddField(Telemetry::FieldType::App, "Git_Revision", Common::g_scm_rev); AddField(Telemetry::FieldType::App, "BuildDate", Common::g_build_date); + AddField(Telemetry::FieldType::App, "BuildName", Common::g_build_name); // Log user system information AddField(Telemetry::FieldType::UserSystem, "CPU_Model", Common::GetCPUCaps().cpu_string); From fb8de8985930bc76d8d39d0ff97f880798d5761a Mon Sep 17 00:00:00 2001 From: bunnei Date: Wed, 2 Aug 2017 23:11:54 -0400 Subject: [PATCH 050/195] telemetry: Add field for OsPlatform. --- src/core/telemetry_session.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index aca5136233..94483f3852 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp @@ -76,6 +76,15 @@ TelemetrySession::TelemetrySession() { Common::GetCPUCaps().sse4_1); AddField(Telemetry::FieldType::UserSystem, "CPU_Extension_x64_SSE42", Common::GetCPUCaps().sse4_2); +#ifdef __APPLE__ + AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Apple"); +#elif defined(_WIN32) + AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Windows"); +#elif defined(__linux__) || defined(linux) || defined(__linux) + AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Linux"); +#else + AddField(Telemetry::FieldType::UserSystem, "OsPlatform", "Unknown"); +#endif // Log user configuration information AddField(Telemetry::FieldType::UserConfig, "Audio_EnableAudioStretching", From f55b7aefd998553648c6d7692d8dcf94057ca7ca Mon Sep 17 00:00:00 2001 From: Andrea Pascal Date: Fri, 4 Aug 2017 23:11:27 -0400 Subject: [PATCH 051/195] Quickfix typo in OpenGL 3.3 error message User pointed out on the Discord server that "nothave" is erroneously concatenated. Added a space to prevent it. --- src/citra_qt/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 02bfdca3d7..c1ae0ccc89 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -311,7 +311,7 @@ bool GMainWindow::LoadROM(const QString& filename) { if (!gladLoadGL()) { QMessageBox::critical(this, tr("Error while initializing OpenGL 3.3 Core!"), - tr("Your GPU may not support OpenGL 3.3, or you do not" + tr("Your GPU may not support OpenGL 3.3, or you do not " "have the latest graphics driver.")); return false; } From 8bda0ca68dc1182583c0bb2634a93d2776eab3ba Mon Sep 17 00:00:00 2001 From: j-selby Date: Thu, 3 Aug 2017 15:51:48 +1000 Subject: [PATCH 052/195] Travis/AppVeyor: Deploy based upon tags --- .travis-upload.sh | 210 +++++++++++++++++++++++----------------------- .travis.yml | 2 +- appveyor.yml | 12 +-- 3 files changed, 107 insertions(+), 117 deletions(-) diff --git a/.travis-upload.sh b/.travis-upload.sh index 8cfab31cbd..17959b0e17 100755 --- a/.travis-upload.sh +++ b/.travis-upload.sh @@ -1,134 +1,132 @@ -if [ "$TRAVIS_EVENT_TYPE" = "push" ]&&[ "$TRAVIS_BRANCH" = "master" ]; then - GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`" - GITREV="`git show -s --format='%h'`" - mkdir -p artifacts +GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`" +GITREV="`git show -s --format='%h'`" +mkdir -p artifacts - if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then - REV_NAME="citra-linux-${GITDATE}-${GITREV}" - ARCHIVE_NAME="${REV_NAME}.tar.xz" - COMPRESSION_FLAGS="-cJvf" - mkdir "$REV_NAME" +if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then + REV_NAME="citra-linux-${GITDATE}-${GITREV}" + ARCHIVE_NAME="${REV_NAME}.tar.xz" + COMPRESSION_FLAGS="-cJvf" + mkdir "$REV_NAME" - cp build/src/citra/citra "$REV_NAME" - cp build/src/citra_qt/citra-qt "$REV_NAME" - elif [ "$TRAVIS_OS_NAME" = "osx" ]; then - REV_NAME="citra-osx-${GITDATE}-${GITREV}" - ARCHIVE_NAME="${REV_NAME}.tar.gz" - COMPRESSION_FLAGS="-czvf" - mkdir "$REV_NAME" + cp build/src/citra/citra "$REV_NAME" + cp build/src/citra_qt/citra-qt "$REV_NAME" +elif [ "$TRAVIS_OS_NAME" = "osx" ]; then + REV_NAME="citra-osx-${GITDATE}-${GITREV}" + ARCHIVE_NAME="${REV_NAME}.tar.gz" + COMPRESSION_FLAGS="-czvf" + mkdir "$REV_NAME" - cp build/src/citra/Release/citra "$REV_NAME" - cp -r build/src/citra_qt/Release/citra-qt.app "$REV_NAME" + cp build/src/citra/Release/citra "$REV_NAME" + cp -r build/src/citra_qt/Release/citra-qt.app "$REV_NAME" - # move qt libs into app bundle for deployment - $(brew --prefix)/opt/qt5/bin/macdeployqt "${REV_NAME}/citra-qt.app" + # move qt libs into app bundle for deployment + $(brew --prefix)/opt/qt5/bin/macdeployqt "${REV_NAME}/citra-qt.app" - # move SDL2 libs into folder for deployment - dylibbundler -b -x "${REV_NAME}/citra" -cd -d "${REV_NAME}/libs" -p "@executable_path/libs/" + # move SDL2 libs into folder for deployment + dylibbundler -b -x "${REV_NAME}/citra" -cd -d "${REV_NAME}/libs" -p "@executable_path/libs/" - # Make the changes to make the citra-qt app standalone (i.e. not dependent on the current brew installation). - # To do this, the absolute references to each and every QT framework must be re-written to point to the local frameworks - # (in the Contents/Frameworks folder). - # The "install_name_tool" is used to do so. + # Make the changes to make the citra-qt app standalone (i.e. not dependent on the current brew installation). + # To do this, the absolute references to each and every QT framework must be re-written to point to the local frameworks + # (in the Contents/Frameworks folder). + # The "install_name_tool" is used to do so. - # Coreutils is a hack to coerce Homebrew to point to the absolute Cellar path (symlink dereferenced). i.e: - # ls -l /usr/local/opt/qt5:: /usr/local/opt/qt5 -> ../Cellar/qt5/5.6.1-1 - # grealpath ../Cellar/qt5/5.6.1-1:: /usr/local/Cellar/qt5/5.6.1-1 - brew install coreutils + # Coreutils is a hack to coerce Homebrew to point to the absolute Cellar path (symlink dereferenced). i.e: + # ls -l /usr/local/opt/qt5:: /usr/local/opt/qt5 -> ../Cellar/qt5/5.6.1-1 + # grealpath ../Cellar/qt5/5.6.1-1:: /usr/local/Cellar/qt5/5.6.1-1 + brew install coreutils - REV_NAME_ALT=$REV_NAME/ - # grealpath is located in coreutils, there is no "realpath" for OS X :( - QT_BREWS_PATH=$(grealpath "$(brew --prefix qt5)") - BREW_PATH=$(brew --prefix) - QT_VERSION_NUM=5 + REV_NAME_ALT=$REV_NAME/ + # grealpath is located in coreutils, there is no "realpath" for OS X :( + QT_BREWS_PATH=$(grealpath "$(brew --prefix qt5)") + BREW_PATH=$(brew --prefix) + QT_VERSION_NUM=5 - $BREW_PATH/opt/qt5/bin/macdeployqt "${REV_NAME_ALT}citra-qt.app" \ - -executable="${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt" + $BREW_PATH/opt/qt5/bin/macdeployqt "${REV_NAME_ALT}citra-qt.app" \ + -executable="${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt" - # These are the files that macdeployqt packed into Contents/Frameworks/ - we don't want those, so we replace them. - declare -a macos_libs=("QtCore" "QtWidgets" "QtGui" "QtOpenGL" "QtPrintSupport") + # These are the files that macdeployqt packed into Contents/Frameworks/ - we don't want those, so we replace them. + declare -a macos_libs=("QtCore" "QtWidgets" "QtGui" "QtOpenGL" "QtPrintSupport") - for macos_lib in "${macos_libs[@]}" + for macos_lib in "${macos_libs[@]}" + do + SC_FRAMEWORK_PART=$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib + # Replace macdeployqt versions of the Frameworks with our own (from /usr/local/opt/qt5/lib/) + cp "$BREW_PATH/opt/qt5/lib/$SC_FRAMEWORK_PART" "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" + + # Replace references within the embedded Framework files with "internal" versions. + for macos_lib2 in "${macos_libs[@]}" do - SC_FRAMEWORK_PART=$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib - # Replace macdeployqt versions of the Frameworks with our own (from /usr/local/opt/qt5/lib/) - cp "$BREW_PATH/opt/qt5/lib/$SC_FRAMEWORK_PART" "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" - - # Replace references within the embedded Framework files with "internal" versions. - for macos_lib2 in "${macos_libs[@]}" - do - # Since brew references both the non-symlinked and symlink paths of QT5, it needs to be duplicated. - # /usr/local/Cellar/qt5/5.6.1-1/lib and /usr/local/opt/qt5/lib both resolve to the same files. - # So the two lines below are effectively duplicates when resolved as a path, but as strings, they aren't. - RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2 - install_name_tool -change \ - $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \ - @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ - "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" - install_name_tool -change \ - "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \ - @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ - "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" - done + # Since brew references both the non-symlinked and symlink paths of QT5, it needs to be duplicated. + # /usr/local/Cellar/qt5/5.6.1-1/lib and /usr/local/opt/qt5/lib both resolve to the same files. + # So the two lines below are effectively duplicates when resolved as a path, but as strings, they aren't. + RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2 + install_name_tool -change \ + $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \ + @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ + "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" + install_name_tool -change \ + "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \ + @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ + "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" done + done - # Handles `This application failed to start because it could not find or load the Qt platform plugin "cocoa"` - # Which manifests itself as: - # "Exception Type: EXC_CRASH (SIGABRT) | Exception Codes: 0x0000000000000000, 0x0000000000000000 | Exception Note: EXC_CORPSE_NOTIFY" - # There may be more dylibs needed to be fixed... - declare -a macos_plugins=("Plugins/platforms/libqcocoa.dylib") + # Handles `This application failed to start because it could not find or load the Qt platform plugin "cocoa"` + # Which manifests itself as: + # "Exception Type: EXC_CRASH (SIGABRT) | Exception Codes: 0x0000000000000000, 0x0000000000000000 | Exception Note: EXC_CORPSE_NOTIFY" + # There may be more dylibs needed to be fixed... + declare -a macos_plugins=("Plugins/platforms/libqcocoa.dylib") - for macos_lib in "${macos_plugins[@]}" + for macos_lib in "${macos_plugins[@]}" + do + install_name_tool -id @executable_path/../$macos_lib "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" + for macos_lib2 in "${macos_libs[@]}" do - install_name_tool -id @executable_path/../$macos_lib "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" - for macos_lib2 in "${macos_libs[@]}" - do - RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2 - install_name_tool -change \ - $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \ - @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ - "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" - install_name_tool -change \ - "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \ - @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ - "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" - done + RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2 + install_name_tool -change \ + $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \ + @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ + "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" + install_name_tool -change \ + "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \ + @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ + "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" done + done - for macos_lib in "${macos_libs[@]}" - do - # Debugging info for Travis-CI - otool -L "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib" - done + for macos_lib in "${macos_libs[@]}" + do + # Debugging info for Travis-CI + otool -L "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib" + done - # Make the citra-qt.app application launch a debugging terminal. - # Store away the actual binary - mv ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt-bin + # Make the citra-qt.app application launch a debugging terminal. + # Store away the actual binary + mv ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt-bin - cat > ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt < ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt < appveyor.yml - C:\ProgramData\chocolatey\lib -> appveyor.yml @@ -72,16 +69,11 @@ artifacts: deploy: provider: GitHub - release: nightly-$(appveyor_build_number) - description: | - Citra nightly releases. Please choose the correct download for your operating system from the list below. - - Short Commit Hash $(GITREV) + release: $(appveyor_repo_tag_name) auth_token: secure: "dbpsMC/MgPKWFNJCXpQl4cR8FYhepkPLjgNp/pRMktZ8oLKTqPYErfreaIxb/4P1" artifact: msvcupdate,msvcbuild draft: false prerelease: false on: - branch: master - appveyor_repo_name: citra-emu/citra-nightly + appveyor_repo_tag: true From baa24f4ea9d9c4d7c1bd60ba8a6fc188dfa9cc8f Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 3 Aug 2017 01:40:42 +0300 Subject: [PATCH 053/195] pica: upload shared shader code to both unit --- src/video_core/command_processor.cpp | 62 +++++++++++++++++----------- src/video_core/regs_pipeline.h | 9 +++- 2 files changed, 45 insertions(+), 26 deletions(-) diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp index 4633a1df10..f98ca33025 100644 --- a/src/video_core/command_processor.cpp +++ b/src/video_core/command_processor.cpp @@ -119,27 +119,6 @@ static void WriteUniformFloatReg(ShaderRegs& config, Shader::ShaderSetup& setup, } } -static void WriteProgramCode(ShaderRegs& config, Shader::ShaderSetup& setup, - unsigned max_program_code_length, u32 value) { - if (config.program.offset >= max_program_code_length) { - LOG_ERROR(HW_GPU, "Invalid %s program offset %d", GetShaderSetupTypeName(setup), - (int)config.program.offset); - } else { - setup.program_code[config.program.offset] = value; - config.program.offset++; - } -} - -static void WriteSwizzlePatterns(ShaderRegs& config, Shader::ShaderSetup& setup, u32 value) { - if (config.swizzle_patterns.offset >= setup.swizzle_data.size()) { - LOG_ERROR(HW_GPU, "Invalid %s swizzle pattern offset %d", GetShaderSetupTypeName(setup), - (int)config.swizzle_patterns.offset); - } else { - setup.swizzle_data[config.swizzle_patterns.offset] = value; - config.swizzle_patterns.offset++; - } -} - static void WritePicaReg(u32 id, u32 value, u32 mask) { auto& regs = g_state.regs; @@ -458,7 +437,13 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[5], 0x2a1): case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[6], 0x2a2): case PICA_REG_INDEX_WORKAROUND(gs.program.set_word[7], 0x2a3): { - WriteProgramCode(g_state.regs.gs, g_state.gs, 4096, value); + u32& offset = g_state.regs.gs.program.offset; + if (offset >= 4096) { + LOG_ERROR(HW_GPU, "Invalid GS program offset %u", offset); + } else { + g_state.gs.program_code[offset] = value; + offset++; + } break; } @@ -470,11 +455,18 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[5], 0x2ab): case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[6], 0x2ac): case PICA_REG_INDEX_WORKAROUND(gs.swizzle_patterns.set_word[7], 0x2ad): { - WriteSwizzlePatterns(g_state.regs.gs, g_state.gs, value); + u32& offset = g_state.regs.gs.swizzle_patterns.offset; + if (offset >= g_state.gs.swizzle_data.size()) { + LOG_ERROR(HW_GPU, "Invalid GS swizzle pattern offset %u", offset); + } else { + g_state.gs.swizzle_data[offset] = value; + offset++; + } break; } case PICA_REG_INDEX(vs.bool_uniforms): + // TODO (wwylele): does regs.pipeline.gs_unit_exclusive_configuration affect this? WriteUniformBoolReg(g_state.vs, g_state.regs.vs.bool_uniforms.Value()); break; @@ -482,6 +474,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[1], 0x2b2): case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[2], 0x2b3): case PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[3], 0x2b4): { + // TODO (wwylele): does regs.pipeline.gs_unit_exclusive_configuration affect this? unsigned index = (id - PICA_REG_INDEX_WORKAROUND(vs.int_uniforms[0], 0x2b1)); auto values = regs.vs.int_uniforms[index]; WriteUniformIntReg(g_state.vs, index, @@ -497,6 +490,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[5], 0x2c6): case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[6], 0x2c7): case PICA_REG_INDEX_WORKAROUND(vs.uniform_setup.set_value[7], 0x2c8): { + // TODO (wwylele): does regs.pipeline.gs_unit_exclusive_configuration affect this? WriteUniformFloatReg(g_state.regs.vs, g_state.vs, vs_float_regs_counter, vs_uniform_write_buffer, value); break; @@ -510,7 +504,16 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[5], 0x2d1): case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[6], 0x2d2): case PICA_REG_INDEX_WORKAROUND(vs.program.set_word[7], 0x2d3): { - WriteProgramCode(g_state.regs.vs, g_state.vs, 512, value); + u32& offset = g_state.regs.vs.program.offset; + if (offset >= 512) { + LOG_ERROR(HW_GPU, "Invalid VS program offset %u", offset); + } else { + g_state.vs.program_code[offset] = value; + if (!g_state.regs.pipeline.gs_unit_exclusive_configuration) { + g_state.gs.program_code[offset] = value; + } + offset++; + } break; } @@ -522,7 +525,16 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[5], 0x2db): case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[6], 0x2dc): case PICA_REG_INDEX_WORKAROUND(vs.swizzle_patterns.set_word[7], 0x2dd): { - WriteSwizzlePatterns(g_state.regs.vs, g_state.vs, value); + u32& offset = g_state.regs.vs.swizzle_patterns.offset; + if (offset >= g_state.vs.swizzle_data.size()) { + LOG_ERROR(HW_GPU, "Invalid VS swizzle pattern offset %u", offset); + } else { + g_state.vs.swizzle_data[offset] = value; + if (!g_state.regs.pipeline.gs_unit_exclusive_configuration) { + g_state.gs.swizzle_data[offset] = value; + } + offset++; + } break; } diff --git a/src/video_core/regs_pipeline.h b/src/video_core/regs_pipeline.h index 31c747d771..8b63692979 100644 --- a/src/video_core/regs_pipeline.h +++ b/src/video_core/regs_pipeline.h @@ -202,7 +202,14 @@ struct PipelineRegs { /// Number of input attributes to the vertex shader minus 1 BitField<0, 4, u32> max_input_attrib_index; - INSERT_PADDING_WORDS(2); + INSERT_PADDING_WORDS(1); + + // The shader unit 3, which can be used for both vertex and geometry shader, gets its + // configuration depending on this register. If this is not set, unit 3 will share some + // configuration with other units. It is known that program code and swizzle pattern uploaded + // via regs.vs will be also uploaded to unit 3 if this is not set. Although very likely, it is + // still unclear whether uniforms and other configuration can be also shared. + BitField<0, 1, u32> gs_unit_exclusive_configuration; enum class GPUMode : u32 { Drawing = 0, From 73fba0de46aef0b18ef0ef5221cc23a60be4cb6c Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 22 Jul 2017 12:33:03 -0500 Subject: [PATCH 054/195] Services/APT: Use an array to hold data about the 4 possible concurrent applet types (Application, Library, HomeMenu, System). This gives each applet type its own set of events as per the real NS module. --- src/core/hle/service/apt/apt.cpp | 235 ++++++++++++++++++++++++++----- src/core/hle/service/apt/apt.h | 6 +- 2 files changed, 205 insertions(+), 36 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 0109fa2b26..9cfa9efde9 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -34,8 +34,6 @@ static bool shared_font_loaded = false; static bool shared_font_relocated = false; static Kernel::SharedPtr lock; -static Kernel::SharedPtr notification_event; ///< APT notification event -static Kernel::SharedPtr parameter_event; ///< APT parameter event static u32 cpu_percent; ///< CPU time available to the running application @@ -44,32 +42,164 @@ static u8 unknown_ns_state_field; static ScreencapPostPermission screen_capture_post_permission; -/// Parameter data to be returned in the next call to Glance/ReceiveParameter +/// Parameter data to be returned in the next call to Glance/ReceiveParameter. +/// TODO(Subv): Use std::optional once we migrate to C++17. static boost::optional next_parameter; +enum class AppletPos { Application = 0, Library = 1, System = 2, SysLibrary = 3, Resident = 4 }; + +static constexpr size_t NumAppletSlot = 4; + +enum class AppletSlot : u8 { + Application, + SystemApplet, + HomeMenu, + LibraryApplet, + + // An invalid tag + Error, +}; + +struct AppletSlotData { + AppletId applet_id; + AppletSlot slot; + bool registered; + u32 attributes; + Kernel::SharedPtr notification_event; + Kernel::SharedPtr parameter_event; +}; + +// Holds data about the concurrently running applets in the system. +static std::array applet_slots = {}; + +union AppletAttributes { + u32 raw; + + BitField<0, 3, u32> applet_pos; + + AppletAttributes(u32 attributes) : raw(attributes) {} +}; + +// Helper function to extract the AppletPos from the lower bits of the applet attributes +static u32 GetAppletPos(AppletAttributes attributes) { + return attributes.applet_pos; +} + +// This overload returns nullptr if no applet with the specified id has been started. +static AppletSlotData* GetAppletSlotData(AppletId id) { + auto GetSlot = [](AppletSlot slot) -> AppletSlotData* { + return &applet_slots[static_cast(slot)]; + }; + + if (id == AppletId::Application) { + auto* slot = GetSlot(AppletSlot::Application); + if (slot->applet_id != AppletId::None) + return slot; + + return nullptr; + } + + if (id == AppletId::AnySystemApplet) { + auto* system_slot = GetSlot(AppletSlot::SystemApplet); + if (system_slot->applet_id != AppletId::None) + return system_slot; + + // The Home Menu is also a system applet, but it lives in its own slot to be able to run + // concurrently with other system applets. + auto* home_slot = GetSlot(AppletSlot::HomeMenu); + if (home_slot->applet_id != AppletId::None) + return home_slot; + + return nullptr; + } + + if (id == AppletId::AnyLibraryApplet || id == AppletId::AnySysLibraryApplet) { + auto* slot = GetSlot(AppletSlot::LibraryApplet); + if (slot->applet_id == AppletId::None) + return nullptr; + + u32 applet_pos = GetAppletPos(slot->attributes); + + if (id == AppletId::AnyLibraryApplet && applet_pos == static_cast(AppletPos::Library)) + return slot; + + if (id == AppletId::AnySysLibraryApplet && + applet_pos == static_cast(AppletPos::SysLibrary)) + return slot; + + return nullptr; + } + + if (id == AppletId::HomeMenu || id == AppletId::AlternateMenu) { + auto* slot = GetSlot(AppletSlot::HomeMenu); + if (slot->applet_id != AppletId::None) + return slot; + + return nullptr; + } + + for (auto& slot : applet_slots) { + if (slot.applet_id == id) + return &slot; + } + + return nullptr; +} + +static AppletSlotData* GetAppletSlotData(u32 attributes) { + // Mapping from AppletPos to AppletSlot + static constexpr std::array applet_position_slots = { + AppletSlot::Application, AppletSlot::LibraryApplet, AppletSlot::SystemApplet, + AppletSlot::LibraryApplet, AppletSlot::Error, AppletSlot::LibraryApplet}; + + u32 applet_pos = GetAppletPos(attributes); + if (applet_pos >= applet_position_slots.size()) + return nullptr; + + AppletSlot slot = applet_position_slots[applet_pos]; + + if (slot == AppletSlot::Error) + return nullptr; + + return &applet_slots[static_cast(slot)]; +} + void SendParameter(const MessageParameter& parameter) { next_parameter = parameter; - // Signal the event to let the application know that a new parameter is ready to be read - parameter_event->Signal(); + // Signal the event to let the receiver know that a new parameter is ready to be read + auto* const slot_data = GetAppletSlotData(static_cast(parameter.destination_id)); + ASSERT(slot_data); + + slot_data->parameter_event->Signal(); } void Initialize(Service::Interface* self) { IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x2, 2, 0); // 0x20080 u32 app_id = rp.Pop(); - u32 flags = rp.Pop(); + u32 attributes = rp.Pop(); + + LOG_DEBUG(Service_APT, "called app_id=0x%08X, attributes=0x%08X", app_id, attributes); + + auto* const slot_data = GetAppletSlotData(attributes); + + // Note: The real NS service does not check if the attributes value is valid before accessing + // the data in the array + ASSERT_MSG(slot_data, "Invalid application attributes"); + + if (slot_data->registered) { + IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); + rb.Push(ResultCode(ErrorDescription::AlreadyExists, ErrorModule::Applet, + ErrorSummary::InvalidState, ErrorLevel::Status)); + return; + } + + slot_data->applet_id = static_cast(app_id); + slot_data->attributes = attributes; + IPC::RequestBuilder rb = rp.MakeBuilder(1, 3); rb.Push(RESULT_SUCCESS); - rb.PushCopyHandles(Kernel::g_handle_table.Create(notification_event).Unwrap(), - Kernel::g_handle_table.Create(parameter_event).Unwrap()); - - // TODO(bunnei): Check if these events are cleared every time Initialize is called. - notification_event->Clear(); - parameter_event->Clear(); - - ASSERT_MSG((nullptr != lock), "Cannot initialize without lock"); - lock->Release(); - - LOG_DEBUG(Service_APT, "called app_id=0x%08X, flags=0x%08X", app_id, flags); + rb.PushCopyHandles(Kernel::g_handle_table.Create(slot_data->notification_event).Unwrap(), + Kernel::g_handle_table.Create(slot_data->parameter_event).Unwrap()); } void GetSharedFont(Service::Interface* self) { @@ -120,7 +250,12 @@ void GetLockHandle(Service::Interface* self) { // this will cause the app to wait until parameter_event is signaled. u32 applet_attributes = rp.Pop(); IPC::RequestBuilder rb = rp.MakeBuilder(3, 2); - rb.Push(RESULT_SUCCESS); // No error + rb.Push(RESULT_SUCCESS); // No error + + // TODO(Subv): The output attributes should have an AppletPos of either Library or System | + // Library (depending on the type of the last launched applet) if the input attributes' + // AppletPos has the Library bit set. + rb.Push(applet_attributes); // Applet Attributes, this value is passed to Enable. rb.Push(0); // Least significant bit = power button state Kernel::Handle handle_copy = Kernel::g_handle_table.Create(lock).Unwrap(); @@ -133,10 +268,22 @@ void GetLockHandle(Service::Interface* self) { void Enable(Service::Interface* self) { IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x3, 1, 0); // 0x30040 u32 attributes = rp.Pop(); + + LOG_DEBUG(Service_APT, "called attributes=0x%08X", attributes); + IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); - rb.Push(RESULT_SUCCESS); // No error - parameter_event->Signal(); // Let the application know that it has been started - LOG_WARNING(Service_APT, "(STUBBED) called attributes=0x%08X", attributes); + + auto* const slot_data = GetAppletSlotData(attributes); + + if (!slot_data) { + rb.Push(ResultCode(ErrCodes::InvalidAppletSlot, ErrorModule::Applet, + ErrorSummary::InvalidState, ErrorLevel::Status)); + return; + } + + slot_data->registered = true; + + rb.Push(RESULT_SUCCESS); } void GetAppletManInfo(Service::Interface* self) { @@ -154,22 +301,27 @@ void GetAppletManInfo(Service::Interface* self) { void IsRegistered(Service::Interface* self) { IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x9, 1, 0); // 0x90040 - u32 app_id = rp.Pop(); + AppletId app_id = static_cast(rp.Pop()); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); rb.Push(RESULT_SUCCESS); // No error - // TODO(Subv): An application is considered "registered" if it has already called APT::Enable - // handle this properly once we implement multiprocess support. - bool is_registered = false; // Set to not registered by default + auto* const slot_data = GetAppletSlotData(app_id); - if (app_id == static_cast(AppletId::AnyLibraryApplet)) { - is_registered = HLE::Applets::IsLibraryAppletRunning(); - } else if (auto applet = HLE::Applets::Applet::Get(static_cast(app_id))) { - is_registered = true; // Set to registered + // Check if an LLE applet was registered first, then fallback to HLE applets + bool is_registered = slot_data && slot_data->registered; + + if (!is_registered) { + if (app_id == AppletId::AnyLibraryApplet) { + is_registered = HLE::Applets::IsLibraryAppletRunning(); + } else if (auto applet = HLE::Applets::Applet::Get(app_id)) { + // The applet exists, set it as registered. + is_registered = true; + } } + rb.Push(is_registered); - LOG_WARNING(Service_APT, "(STUBBED) called app_id=0x%08X", app_id); + LOG_DEBUG(Service_APT, "called app_id=0x%08X", static_cast(app_id)); } void InquireNotification(Service::Interface* self) { @@ -864,14 +1016,23 @@ void Init() { screen_capture_post_permission = ScreencapPostPermission::CleanThePermission; // TODO(JamePeng): verify the initial value - // TODO(bunnei): Check if these are created in Initialize or on APT process startup. - notification_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT_U:Notification"); - parameter_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT_U:Start"); + for (size_t slot = 0; slot < applet_slots.size(); ++slot) { + auto& slot_data = applet_slots[slot]; + slot_data.slot = static_cast(slot); + slot_data.applet_id = AppletId::None; + slot_data.attributes = 0; + slot_data.registered = false; + slot_data.notification_event = + Kernel::Event::Create(Kernel::ResetType::OneShot, "APT:Notification"); + slot_data.parameter_event = + Kernel::Event::Create(Kernel::ResetType::OneShot, "APT:Parameter"); + } // Initialize the parameter to wake up the application. next_parameter.emplace(); next_parameter->signal = static_cast(SignalType::Wakeup); next_parameter->destination_id = static_cast(AppletId::Application); + applet_slots[static_cast(AppletSlot::Application)].parameter_event->Signal(); } void Shutdown() { @@ -879,8 +1040,12 @@ void Shutdown() { shared_font_loaded = false; shared_font_relocated = false; lock = nullptr; - notification_event = nullptr; - parameter_event = nullptr; + + for (auto& slot : applet_slots) { + slot.registered = false; + slot.notification_event = nullptr; + slot.parameter_event = nullptr; + } next_parameter = boost::none; diff --git a/src/core/hle/service/apt/apt.h b/src/core/hle/service/apt/apt.h index 1067548534..96b28b438a 100644 --- a/src/core/hle/service/apt/apt.h +++ b/src/core/hle/service/apt/apt.h @@ -72,6 +72,8 @@ enum class SignalType : u32 { /// App Id's used by APT functions enum class AppletId : u32 { + None = 0, + AnySystemApplet = 0x100, HomeMenu = 0x101, AlternateMenu = 0x103, Camera = 0x110, @@ -83,6 +85,7 @@ enum class AppletId : u32 { Miiverse = 0x117, MiiversePost = 0x118, AmiiboSettings = 0x119, + AnySysLibraryApplet = 0x200, SoftwareKeyboard1 = 0x201, Ed1 = 0x202, PnoteApp = 0x204, @@ -119,8 +122,9 @@ enum class ScreencapPostPermission : u32 { namespace ErrCodes { enum { ParameterPresent = 2, + InvalidAppletSlot = 4, }; -} +} // namespace ErrCodes /// Send a parameter to the currently-running application, which will read it via ReceiveParameter void SendParameter(const MessageParameter& parameter); From 177e8ce655953e22b5304070694f2d2d6e65dda9 Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 7 Aug 2017 16:09:55 -0500 Subject: [PATCH 055/195] Services/APT: Use the AppletAttributes union directly when dealing with applet attrs. --- src/core/hle/service/apt/apt.cpp | 34 ++++++++++++++------------------ 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 9cfa9efde9..58d94768c3 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -60,11 +60,20 @@ enum class AppletSlot : u8 { Error, }; +union AppletAttributes { + u32 raw; + + BitField<0, 3, u32> applet_pos; + + AppletAttributes() : raw(0) {} + AppletAttributes(u32 attributes) : raw(attributes) {} +}; + struct AppletSlotData { AppletId applet_id; AppletSlot slot; bool registered; - u32 attributes; + AppletAttributes attributes; Kernel::SharedPtr notification_event; Kernel::SharedPtr parameter_event; }; @@ -72,19 +81,6 @@ struct AppletSlotData { // Holds data about the concurrently running applets in the system. static std::array applet_slots = {}; -union AppletAttributes { - u32 raw; - - BitField<0, 3, u32> applet_pos; - - AppletAttributes(u32 attributes) : raw(attributes) {} -}; - -// Helper function to extract the AppletPos from the lower bits of the applet attributes -static u32 GetAppletPos(AppletAttributes attributes) { - return attributes.applet_pos; -} - // This overload returns nullptr if no applet with the specified id has been started. static AppletSlotData* GetAppletSlotData(AppletId id) { auto GetSlot = [](AppletSlot slot) -> AppletSlotData* { @@ -118,7 +114,7 @@ static AppletSlotData* GetAppletSlotData(AppletId id) { if (slot->applet_id == AppletId::None) return nullptr; - u32 applet_pos = GetAppletPos(slot->attributes); + u32 applet_pos = slot->attributes.applet_pos; if (id == AppletId::AnyLibraryApplet && applet_pos == static_cast(AppletPos::Library)) return slot; @@ -146,13 +142,13 @@ static AppletSlotData* GetAppletSlotData(AppletId id) { return nullptr; } -static AppletSlotData* GetAppletSlotData(u32 attributes) { +static AppletSlotData* GetAppletSlotData(AppletAttributes attributes) { // Mapping from AppletPos to AppletSlot static constexpr std::array applet_position_slots = { AppletSlot::Application, AppletSlot::LibraryApplet, AppletSlot::SystemApplet, AppletSlot::LibraryApplet, AppletSlot::Error, AppletSlot::LibraryApplet}; - u32 applet_pos = GetAppletPos(attributes); + u32 applet_pos = attributes.applet_pos; if (applet_pos >= applet_position_slots.size()) return nullptr; @@ -194,7 +190,7 @@ void Initialize(Service::Interface* self) { } slot_data->applet_id = static_cast(app_id); - slot_data->attributes = attributes; + slot_data->attributes.raw = attributes; IPC::RequestBuilder rb = rp.MakeBuilder(1, 3); rb.Push(RESULT_SUCCESS); @@ -1020,7 +1016,7 @@ void Init() { auto& slot_data = applet_slots[slot]; slot_data.slot = static_cast(slot); slot_data.applet_id = AppletId::None; - slot_data.attributes = 0; + slot_data.attributes.raw = 0; slot_data.registered = false; slot_data.notification_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT:Notification"); From 1a44949ef75016fa48f9daa0cf3c973ef7d3978c Mon Sep 17 00:00:00 2001 From: James Date: Tue, 8 Aug 2017 17:50:09 +1000 Subject: [PATCH 056/195] Update cryptopp --- externals/cryptopp/cryptopp | 2 +- src/core/hle/service/cfg/cfg.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/externals/cryptopp/cryptopp b/externals/cryptopp/cryptopp index 841c37e347..24bc2b8567 160000 --- a/externals/cryptopp/cryptopp +++ b/externals/cryptopp/cryptopp @@ -1 +1 @@ -Subproject commit 841c37e34765487a2968357369ab74db8b10a62d +Subproject commit 24bc2b85674254fb294e717eb5b47d9f53e786b8 diff --git a/src/core/hle/service/cfg/cfg.cpp b/src/core/hle/service/cfg/cfg.cpp index 6624f17112..3dbeb27cc2 100644 --- a/src/core/hle/service/cfg/cfg.cpp +++ b/src/core/hle/service/cfg/cfg.cpp @@ -681,7 +681,7 @@ void GenerateConsoleUniqueId(u32& random_number, u64& console_id) { CryptoPP::AutoSeededRandomPool rng; random_number = rng.GenerateWord32(0, 0xFFFF); u64_le local_friend_code_seed; - rng.GenerateBlock(reinterpret_cast(&local_friend_code_seed), + rng.GenerateBlock(reinterpret_cast(&local_friend_code_seed), sizeof(local_friend_code_seed)); console_id = (local_friend_code_seed & 0x3FFFFFFFF) | (static_cast(random_number) << 48); } From a6273dd56a4a7066ef27fa186e1046db677ff578 Mon Sep 17 00:00:00 2001 From: mailwl Date: Wed, 9 Aug 2017 12:00:54 +0300 Subject: [PATCH 057/195] Service/dlp: Update function tables according 3dbrew --- src/core/hle/service/dlp/dlp_clnt.cpp | 21 ++++++++++++++++++++- src/core/hle/service/dlp/dlp_fkcl.cpp | 18 +++++++++++++++++- src/core/hle/service/dlp/dlp_srvr.cpp | 9 +++++++-- 3 files changed, 44 insertions(+), 4 deletions(-) diff --git a/src/core/hle/service/dlp/dlp_clnt.cpp b/src/core/hle/service/dlp/dlp_clnt.cpp index 56f934b3f8..6f2bf2061e 100644 --- a/src/core/hle/service/dlp/dlp_clnt.cpp +++ b/src/core/hle/service/dlp/dlp_clnt.cpp @@ -8,7 +8,26 @@ namespace Service { namespace DLP { const Interface::FunctionInfo FunctionTable[] = { - {0x000100C3, nullptr, "Initialize"}, {0x00110000, nullptr, "GetWirelessRebootPassphrase"}, + {0x000100C3, nullptr, "Initialize"}, + {0x00020000, nullptr, "Finalize"}, + {0x00030000, nullptr, "GetEventDesc"}, + {0x00040000, nullptr, "GetChannel"}, + {0x00050180, nullptr, "StartScan"}, + {0x00060000, nullptr, "StopScan"}, + {0x00070080, nullptr, "GetServerInfo"}, + {0x00080100, nullptr, "GetTitleInfo"}, + {0x00090040, nullptr, "GetTitleInfoInOrder"}, + {0x000A0080, nullptr, "DeleteScanInfo"}, + {0x000B0100, nullptr, "PrepareForSystemDownload"}, + {0x000C0000, nullptr, "StartSystemDownload"}, + {0x000D0100, nullptr, "StartTitleDownload"}, + {0x000E0000, nullptr, "GetMyStatus"}, + {0x000F0040, nullptr, "GetConnectingNodes"}, + {0x00100040, nullptr, "GetNodeInfo"}, + {0x00110000, nullptr, "GetWirelessRebootPassphrase"}, + {0x00120000, nullptr, "StopSession"}, + {0x00130100, nullptr, "GetCupVersion"}, + {0x00140100, nullptr, "GetDupAvailability"}, }; DLP_CLNT_Interface::DLP_CLNT_Interface() { diff --git a/src/core/hle/service/dlp/dlp_fkcl.cpp b/src/core/hle/service/dlp/dlp_fkcl.cpp index 29b9d52e0b..fe6be7d320 100644 --- a/src/core/hle/service/dlp/dlp_fkcl.cpp +++ b/src/core/hle/service/dlp/dlp_fkcl.cpp @@ -8,7 +8,23 @@ namespace Service { namespace DLP { const Interface::FunctionInfo FunctionTable[] = { - {0x00010083, nullptr, "Initialize"}, {0x000F0000, nullptr, "GetWirelessRebootPassphrase"}, + {0x00010083, nullptr, "Initialize"}, + {0x00020000, nullptr, "Finalize"}, + {0x00030000, nullptr, "GetEventDesc"}, + {0x00040000, nullptr, "GetChannels"}, + {0x00050180, nullptr, "StartScan"}, + {0x00060000, nullptr, "StopScan"}, + {0x00070080, nullptr, "GetServerInfo"}, + {0x00080100, nullptr, "GetTitleInfo"}, + {0x00090040, nullptr, "GetTitleInfoInOrder"}, + {0x000A0080, nullptr, "DeleteScanInfo"}, + {0x000B0100, nullptr, "StartFakeSession"}, + {0x000C0000, nullptr, "GetMyStatus"}, + {0x000D0040, nullptr, "GetConnectingNodes"}, + {0x000E0040, nullptr, "GetNodeInfo"}, + {0x000F0000, nullptr, "GetWirelessRebootPassphrase"}, + {0x00100000, nullptr, "StopSession"}, + {0x00110203, nullptr, "Initialize2"}, }; DLP_FKCL_Interface::DLP_FKCL_Interface() { diff --git a/src/core/hle/service/dlp/dlp_srvr.cpp b/src/core/hle/service/dlp/dlp_srvr.cpp index 32cfa2c449..1bcea43d30 100644 --- a/src/core/hle/service/dlp/dlp_srvr.cpp +++ b/src/core/hle/service/dlp/dlp_srvr.cpp @@ -11,7 +11,7 @@ namespace Service { namespace DLP { -static void unk_0x000E0040(Interface* self) { +static void IsChild(Interface* self) { u32* cmd_buff = Kernel::GetCommandBuffer(); cmd_buff[1] = RESULT_SUCCESS.raw; @@ -24,14 +24,19 @@ const Interface::FunctionInfo FunctionTable[] = { {0x00010183, nullptr, "Initialize"}, {0x00020000, nullptr, "Finalize"}, {0x00030000, nullptr, "GetServerState"}, + {0x00040000, nullptr, "GetEventDescription"}, {0x00050080, nullptr, "StartAccepting"}, + {0x00060000, nullptr, "EndAccepting"}, {0x00070000, nullptr, "StartDistribution"}, {0x000800C0, nullptr, "SendWirelessRebootPassphrase"}, {0x00090040, nullptr, "AcceptClient"}, + {0x000A0040, nullptr, "DisconnectClient"}, {0x000B0042, nullptr, "GetConnectingClients"}, {0x000C0040, nullptr, "GetClientInfo"}, {0x000D0040, nullptr, "GetClientState"}, - {0x000E0040, unk_0x000E0040, "unk_0x000E0040"}, + {0x000E0040, IsChild, "IsChild"}, + {0x000F0303, nullptr, "InitializeWithName"}, + {0x00100000, nullptr, "GetDupNoticeNeed"}, }; DLP_SRVR_Interface::DLP_SRVR_Interface() { From db309b2423a996cb792273080e73906b07f8b45b Mon Sep 17 00:00:00 2001 From: wwylele Date: Mon, 24 Jul 2017 14:13:33 +0300 Subject: [PATCH 058/195] pica/regs: layout geometry shader configuration regs All the register meanings are derived from ctrulib (3dbrew is outdated for most of them) --- src/video_core/regs_pipeline.h | 34 ++++++++++++++++++++++++++++++++-- src/video_core/regs_shader.h | 7 +++++++ 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/video_core/regs_pipeline.h b/src/video_core/regs_pipeline.h index 8b63692979..e78c3e3317 100644 --- a/src/video_core/regs_pipeline.h +++ b/src/video_core/regs_pipeline.h @@ -147,7 +147,15 @@ struct PipelineRegs { // Number of vertices to render u32 num_vertices; - INSERT_PADDING_WORDS(0x1); + enum class UseGS : u32 { + No = 0, + Yes = 2, + }; + + union { + BitField<0, 2, UseGS> use_gs; + BitField<31, 1, u32> variable_primitive; + }; // The index of the first vertex to render u32 vertex_offset; @@ -218,7 +226,29 @@ struct PipelineRegs { GPUMode gpu_mode; - INSERT_PADDING_WORDS(0x18); + INSERT_PADDING_WORDS(0x4); + BitField<0, 4, u32> vs_outmap_total_minus_1_a; + INSERT_PADDING_WORDS(0x6); + BitField<0, 4, u32> vs_outmap_total_minus_1_b; + + enum class GSMode : u32 { + Point = 0, + VariablePrimitive = 1, + FixedPrimitive = 2, + }; + + union { + BitField<0, 8, GSMode> mode; + BitField<8, 4, u32> fixed_vertex_num_minus_1; + BitField<12, 4, u32> stride_minus_1; + BitField<16, 4, u32> start_index; + } gs_config; + + INSERT_PADDING_WORDS(0x1); + + u32 variable_vertex_main_num_minus_1; + + INSERT_PADDING_WORDS(0x9); enum class TriangleTopology : u32 { List = 0, diff --git a/src/video_core/regs_shader.h b/src/video_core/regs_shader.h index ddb1ee4515..c15d4d1623 100644 --- a/src/video_core/regs_shader.h +++ b/src/video_core/regs_shader.h @@ -24,9 +24,16 @@ struct ShaderRegs { INSERT_PADDING_WORDS(0x4); + enum ShaderMode { + GS = 0x08, + VS = 0xA0, + }; + union { // Number of input attributes to shader unit - 1 BitField<0, 4, u32> max_input_attribute_index; + BitField<8, 8, u32> input_to_uniform; + BitField<24, 8, ShaderMode> shader_mode; }; // Offset to shader program entry point (in words) From 80f85b429c7cfce70535e68014ed1bf5dcdfbc03 Mon Sep 17 00:00:00 2001 From: j-selby Date: Thu, 10 Aug 2017 14:17:27 +1000 Subject: [PATCH 059/195] Implement correct folder structure for CI builds --- .travis-upload.sh | 11 +++++++++-- appveyor.yml | 20 ++++++++++++++------ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/.travis-upload.sh b/.travis-upload.sh index 17959b0e17..8c1fa21c5b 100755 --- a/.travis-upload.sh +++ b/.travis-upload.sh @@ -123,9 +123,16 @@ cp README.md "$REV_NAME" tar $COMPRESSION_FLAGS "$ARCHIVE_NAME" "$REV_NAME" -mv "$REV_NAME" nightly +# Find out what release we are building +if [ -z $TRAVIS_TAG ]; then + RELEASE_NAME=head +else + RELEASE_NAME=$(echo $TRAVIS_TAG | cut -d- -f1) +fi -7z a "$REV_NAME.7z" nightly +mv "$REV_NAME" $RELEASE_NAME + +7z a "$REV_NAME.7z" $RELEASE_NAME # move the compiled archive into the artifacts directory to be uploaded by travis releases mv "$ARCHIVE_NAME" artifacts/ diff --git a/appveyor.yml b/appveyor.yml index eb4e7df879..94e9969f5e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -46,13 +46,21 @@ after_build: 7z a -tzip $MSVC_BUILD_PDB .\build\bin\release\*.pdb rm .\build\bin\release\*.pdb - mkdir nightly - Copy-Item .\build\bin\release\* -Destination nightly -Recurse - Copy-Item .\license.txt -Destination nightly - Copy-Item .\README.md -Destination nightly + # Find out which kind of release we are producing by tag name + if ($env:APPVEYOR_REPO_TAG_NAME) { + $RELEASE_DIST, $RELEASE_VERSION = $env:APPVEYOR_REPO_TAG_NAME.split('-') + } else { + # There is no repo tag - make assumptions + $RELEASE_DIST = "head" + } - 7z a -tzip $MSVC_BUILD_NAME nightly\* - 7z a $MSVC_SEVENZIP nightly + mkdir $RELEASE_DIST + Copy-Item .\build\bin\release\* -Destination $RELEASE_DIST -Recurse + Copy-Item .\license.txt -Destination $RELEASE_DIST + Copy-Item .\README.md -Destination $RELEASE_DIST + + 7z a -tzip $MSVC_BUILD_NAME $RELEASE_DIST\* + 7z a $MSVC_SEVENZIP $RELEASE_DIST test_script: - cd build && ctest -VV -C Release && cd .. From 5d9d42f0d0e0b2619e7412b86699a9b2b9dfa4ea Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 10 Aug 2017 11:56:55 +0300 Subject: [PATCH 060/195] SwRasterizer/Lighting: use make_tuple instead of constructor implicit tuple constructor is a c++17 thing, which is not supported by some not-so-old libraries. Play safe for now --- src/video_core/swrasterizer/lighting.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/video_core/swrasterizer/lighting.cpp b/src/video_core/swrasterizer/lighting.cpp index 63088eee8c..d61e6d5720 100644 --- a/src/video_core/swrasterizer/lighting.cpp +++ b/src/video_core/swrasterizer/lighting.cpp @@ -244,7 +244,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( MathUtil::Clamp(specular_sum.z, 0.0f, 1.0f) * 255, MathUtil::Clamp(specular_sum.w, 0.0f, 1.0f) * 255) .Cast(); - return {diffuse, specular}; + return std::make_tuple(diffuse, specular); } } // namespace Pica From fa64309aace2b782029ef599d20e8e0f1dd72a83 Mon Sep 17 00:00:00 2001 From: James Date: Fri, 4 Aug 2017 20:11:47 +1000 Subject: [PATCH 061/195] Travis: Use Docker to build for Linux --- .travis-build-docker.sh | 20 ++++++++++++++++++++ .travis-build.sh | 10 +--------- .travis-deps.sh | 30 +----------------------------- .travis.yml | 16 ++++------------ 4 files changed, 26 insertions(+), 50 deletions(-) create mode 100644 .travis-build-docker.sh diff --git a/.travis-build-docker.sh b/.travis-build-docker.sh new file mode 100644 index 0000000000..ca6fae42b3 --- /dev/null +++ b/.travis-build-docker.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +set -e +set -x + +cd /citra + +apt-get update +apt-get install -y build-essential libsdl2-dev qtbase5-dev libqt5opengl5-dev libcurl4-openssl-dev libssl-dev wget git + +# Get a recent version of CMake +wget https://cmake.org/files/v3.9/cmake-3.9.0-Linux-x86_64.sh +echo y | sh cmake-3.9.0-Linux-x86_64.sh --prefix=cmake +export PATH=/citra/cmake/cmake-3.9.0-Linux-x86_64/bin:$PATH + +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=Release +make -j4 + +ctest -VV -C Release diff --git a/.travis-build.sh b/.travis-build.sh index df6e236b69..64f5aed946 100755 --- a/.travis-build.sh +++ b/.travis-build.sh @@ -44,15 +44,7 @@ fi #if OS is linux or is not set if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then - export CC=gcc-6 - export CXX=g++-6 - export PKG_CONFIG_PATH=$HOME/.local/lib/pkgconfig:$PKG_CONFIG_PATH - - mkdir build && cd build - cmake .. - make -j4 - - ctest -VV -C Release + docker run -v $(pwd):/citra ubuntu:16.04 /bin/bash /citra/.travis-build-docker.sh elif [ "$TRAVIS_OS_NAME" = "osx" ]; then set -o pipefail diff --git a/.travis-deps.sh b/.travis-deps.sh index 25a287c7fc..0cee68041b 100755 --- a/.travis-deps.sh +++ b/.travis-deps.sh @@ -5,35 +5,7 @@ set -x #if OS is linux or is not set if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then - export CC=gcc-6 - export CXX=g++-6 - mkdir -p $HOME/.local - - if [ ! -e $HOME/.local/bin/cmake ]; then - echo "CMake not found in the cache, get and extract it..." - curl -L http://www.cmake.org/files/v3.6/cmake-3.6.3-Linux-x86_64.tar.gz \ - | tar -xz -C $HOME/.local --strip-components=1 - else - echo "Using cached CMake" - fi - - if [ ! -e $HOME/.local/lib/libSDL2.la ]; then - echo "SDL2 not found in cache, get and build it..." - wget http://libsdl.org/release/SDL2-2.0.5.tar.gz -O - | tar xz - cd SDL2-2.0.5 - ./configure --prefix=$HOME/.local - make -j4 && make install - else - echo "Using cached SDL2" - fi - - export DEBIAN_FRONTEND=noninteractive - # Amazing placebo security - curl http://apt.llvm.org/llvm-snapshot.gpg.key | sudo -E apt-key add - - sudo -E add-apt-repository "deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-3.9 main" - sudo -E apt-get -yq update - sudo -E apt-get -yq install clang-format-3.9 - + docker pull ubuntu:16.04 elif [ "$TRAVIS_OS_NAME" = "osx" ]; then brew update brew install qt5 sdl2 dylibbundler p7zip diff --git a/.travis.yml b/.travis.yml index 3da22eb5d6..b92d7f2362 100644 --- a/.travis.yml +++ b/.travis.yml @@ -8,23 +8,15 @@ matrix: sudo: false osx_image: xcode7.3 +services: + - docker + addons: apt: - sources: - - ubuntu-toolchain-r-test packages: - - gcc-6 - - g++-6 - - qt5-default - - libqt5opengl5-dev - - xorg-dev - - lib32stdc++6 # For CMake + - clang-format-3.9 - p7zip-full -cache: - directories: - - "$HOME/.local" - install: "./.travis-deps.sh" script: "./.travis-build.sh" after_success: "./.travis-upload.sh" From 599de29ea345bbeee300bec4bd6c3ab31288268d Mon Sep 17 00:00:00 2001 From: wwylele Date: Wed, 9 Aug 2017 06:59:13 +0300 Subject: [PATCH 062/195] HID: zero unused PadState bits --- src/core/hle/service/hid/hid.h | 2 +- src/core/hle/service/ir/ir_rst.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/hle/service/hid/hid.h b/src/core/hle/service/hid/hid.h index 1ef972e70c..ef25926b57 100644 --- a/src/core/hle/service/hid/hid.h +++ b/src/core/hle/service/hid/hid.h @@ -24,7 +24,7 @@ namespace HID { */ struct PadState { union { - u32 hex; + u32 hex{}; BitField<0, 1, u32> a; BitField<1, 1, u32> b; diff --git a/src/core/hle/service/ir/ir_rst.cpp b/src/core/hle/service/ir/ir_rst.cpp index 837413f938..0912d57569 100644 --- a/src/core/hle/service/ir/ir_rst.cpp +++ b/src/core/hle/service/ir/ir_rst.cpp @@ -18,7 +18,7 @@ namespace Service { namespace IR { union PadState { - u32_le hex; + u32_le hex{}; BitField<14, 1, u32_le> zl; BitField<15, 1, u32_le> zr; From 14ee32c46a6dc97c1c6a0597e72e5284bf4e86e6 Mon Sep 17 00:00:00 2001 From: wwylele Date: Fri, 11 Aug 2017 01:13:55 +0300 Subject: [PATCH 063/195] SwRasterizer/Lighting: implement geometric factor --- src/video_core/swrasterizer/lighting.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/video_core/swrasterizer/lighting.cpp b/src/video_core/swrasterizer/lighting.cpp index d61e6d5720..91683afa4d 100644 --- a/src/video_core/swrasterizer/lighting.cpp +++ b/src/video_core/swrasterizer/lighting.cpp @@ -55,6 +55,9 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( light_vector.Normalize(); + Math::Vec3 norm_view = view.Normalized(); + Math::Vec3 half_vector = norm_view + light_vector; + float dist_atten = 1.0f; if (!lighting.IsDistAttenDisabled(num)) { auto distance = (-view - position).Length(); @@ -74,17 +77,15 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( auto GetLutValue = [&](LightingRegs::LightingLutInput input, bool abs, LightingRegs::LightingScale scale_enum, LightingRegs::LightingSampler sampler) { - Math::Vec3 norm_view = view.Normalized(); - Math::Vec3 half_angle = (norm_view + light_vector).Normalized(); float result = 0.0f; switch (input) { case LightingRegs::LightingLutInput::NH: - result = Math::Dot(normal, half_angle); + result = Math::Dot(normal, half_vector.Normalized()); break; case LightingRegs::LightingLutInput::VH: - result = Math::Dot(norm_view, half_angle); + result = Math::Dot(norm_view, half_vector.Normalized()); break; case LightingRegs::LightingLutInput::NV: @@ -224,6 +225,17 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( else dot_product = std::max(dot_product, 0.0f); + if (light_config.config.geometric_factor_0 || light_config.config.geometric_factor_1) { + float geo_factor = half_vector.Length2(); + geo_factor = geo_factor == 0.0f ? 0.0f : std::min(dot_product / geo_factor, 1.0f); + if (light_config.config.geometric_factor_0) { + specular_0 *= geo_factor; + } + if (light_config.config.geometric_factor_1) { + specular_1 *= geo_factor; + } + } + auto diffuse = light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); diffuse_sum += Math::MakeVec(diffuse * dist_atten, 0.0f); From 945f9a1b04d51aff674e0b7061c29a04211a17bd Mon Sep 17 00:00:00 2001 From: wwylele Date: Fri, 11 Aug 2017 00:41:37 +0300 Subject: [PATCH 064/195] SwRasterizer/Lighting: implement spot light --- src/video_core/swrasterizer/lighting.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/src/video_core/swrasterizer/lighting.cpp b/src/video_core/swrasterizer/lighting.cpp index d61e6d5720..ffd35792a2 100644 --- a/src/video_core/swrasterizer/lighting.cpp +++ b/src/video_core/swrasterizer/lighting.cpp @@ -95,6 +95,12 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( result = Math::Dot(light_vector, normal); break; + case LightingRegs::LightingLutInput::SP: { + Math::Vec3 spot_dir{light_config.spot_x.Value(), light_config.spot_y.Value(), + light_config.spot_z.Value()}; + result = Math::Dot(light_vector, spot_dir.Cast() / 2047.0f); + break; + } default: LOG_CRITICAL(HW_GPU, "Unknown lighting LUT input %u\n", static_cast(input)); UNIMPLEMENTED(); @@ -125,6 +131,16 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( LookupLightingLut(lighting_state, static_cast(sampler), index, delta); }; + // If enabled, compute spot light attenuation value + float spot_atten = 1.0f; + if (!lighting.IsSpotAttenDisabled(num) && + LightingRegs::IsLightingSamplerSupported( + lighting.config0.config, LightingRegs::LightingSampler::SpotlightAttenuation)) { + auto lut = LightingRegs::SpotlightAttenuationSampler(num); + spot_atten = GetLutValue(lighting.lut_input.sp, lighting.abs_lut_input.disable_sp == 0, + lighting.lut_scale.sp, lut); + } + // Specular 0 component float d0_lut_value = 1.0f; if (lighting.config1.disable_lut_d0 == 0 && @@ -226,10 +242,10 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( auto diffuse = light_config.diffuse.ToVec3f() * dot_product + light_config.ambient.ToVec3f(); - diffuse_sum += Math::MakeVec(diffuse * dist_atten, 0.0f); + diffuse_sum += Math::MakeVec(diffuse * dist_atten * spot_atten, 0.0f); - specular_sum += - Math::MakeVec((specular_0 + specular_1) * clamp_highlights * dist_atten, 0.0f); + specular_sum += Math::MakeVec( + (specular_0 + specular_1) * clamp_highlights * dist_atten * spot_atten, 0.0f); } diffuse_sum += Math::MakeVec(lighting.global_ambient.ToVec3f(), 0.0f); From 8d3f48d0a3dbab0f5cc39120f69a74ce418a5a41 Mon Sep 17 00:00:00 2001 From: danzel Date: Fri, 11 Aug 2017 19:51:16 +1200 Subject: [PATCH 065/195] Fix some spelling mistakes --- src/citra/default_ini.h | 6 +++--- src/input_common/sdl/sdl.cpp | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h index a12498e0fa..b0a0ebd3b1 100644 --- a/src/citra/default_ini.h +++ b/src/citra/default_ini.h @@ -12,7 +12,7 @@ const char* sdl2_config_file = R"( # It should be in the format of "engine:[engine_name],[param1]:[value1],[param2]:[value2]..." # Escape characters $0 (for ':'), $1 (for ',') and $2 (for '$') can be used in values -# for button input, the following devices are avaible: +# for button input, the following devices are available: # - "keyboard" (default) for keyboard input. Required parameters: # - "code": the code of the key to bind # - "sdl" for joystick input using SDL. Required parameters: @@ -21,7 +21,7 @@ const char* sdl2_config_file = R"( # - "hat"(optional): the index of the hat to bind as direction buttons # - "axis"(optional): the index of the axis to bind # - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", "down", "left" or "right" -# - "threshould"(only used for axis): a float value in (-1.0, 1.0) which the button is +# - "threshold"(only used for axis): a float value in (-1.0, 1.0) which the button is # triggered if the axis value crosses # - "direction"(only used for axis): "+" means the button is triggered when the axis value # is greater than the threshold; "-" means the button is triggered when the axis value @@ -42,7 +42,7 @@ button_zl= button_zr= button_home= -# for analog input, the following devices are avaible: +# for analog input, the following devices are available: # - "analog_from_button" (default) for emulating analog input from direction buttons. Required parameters: # - "up", "down", "left", "right": sub-devices for each direction. # Should be in the format as a button input devices using escape characters, for example, "engine$0keyboard$1code$00" diff --git a/src/input_common/sdl/sdl.cpp b/src/input_common/sdl/sdl.cpp index 756ee58b7f..d404afa89f 100644 --- a/src/input_common/sdl/sdl.cpp +++ b/src/input_common/sdl/sdl.cpp @@ -159,7 +159,7 @@ public: * - "axis"(optional): the index of the axis to bind * - "direction"(only used for hat): the direction name of the hat to bind. Can be "up", * "down", "left" or "right" - * - "threshould"(only used for axis): a float value in (-1.0, 1.0) which the button is + * - "threshold"(only used for axis): a float value in (-1.0, 1.0) which the button is * triggered if the axis value crosses * - "direction"(only used for axis): "+" means the button is triggered when the axis value * is greater than the threshold; "-" means the button is triggered when the axis value From 867eabd6b7effc8ba6c21d7fcbd0480b14f81ad0 Mon Sep 17 00:00:00 2001 From: wwylele Date: Sun, 6 Aug 2017 22:54:19 +0300 Subject: [PATCH 066/195] HID: use MotionDevice for Accelerometer and Gyroscope --- src/core/frontend/input.h | 20 ++++++++++++++++++++ src/core/hle/service/hid/hid.cpp | 32 +++++++++++++++++++++++++++----- src/core/settings.h | 1 + 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/src/core/frontend/input.h b/src/core/frontend/input.h index 0a5713dc06..a8be494405 100644 --- a/src/core/frontend/input.h +++ b/src/core/frontend/input.h @@ -11,6 +11,7 @@ #include #include "common/logging/log.h" #include "common/param_package.h" +#include "common/vector_math.h" namespace Input { @@ -107,4 +108,23 @@ using ButtonDevice = InputDevice; */ using AnalogDevice = InputDevice>; +/** + * A motion device is an input device that returns a tuple of accelerometer state vector and + * gyroscope state vector. + * + * For accelerometer state vector: + * x+ is the same direction as LEFT on D-pad. + * y+ is normal to the touch screen, pointing outward. + * z+ is the same direction as UP on D-pad. + * Units: measured in unit of gravitational acceleration + * + * For gyroscope state vector: + * x+ is the same direction as LEFT on D-pad. + * y+ is normal to the touch screen, pointing outward. + * z+ is the same direction as UP on D-pad. + * Orientation is determined by right-hand rule. + * Units: deg/sec + */ +using MotionDevice = InputDevice, Math::Vec3>>; + } // namespace Input diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 2014b84616..a13b72e883 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -7,6 +7,7 @@ #include #include #include "common/logging/log.h" +#include "core/core.h" #include "core/core_timing.h" #include "core/frontend/emu_window.h" #include "core/frontend/input.h" @@ -50,10 +51,14 @@ constexpr u64 pad_update_ticks = BASE_CLOCK_RATE_ARM11 / 234; constexpr u64 accelerometer_update_ticks = BASE_CLOCK_RATE_ARM11 / 104; constexpr u64 gyroscope_update_ticks = BASE_CLOCK_RATE_ARM11 / 101; +constexpr float accelerometer_coef = 512.0f; // measured from hw test result +constexpr float gyroscope_coef = 14.375f; // got from hwtest GetGyroscopeLowRawToDpsCoefficient call + static std::atomic is_device_reload_pending; static std::array, Settings::NativeButton::NUM_BUTTONS_HID> buttons; static std::unique_ptr circle_pad; +static std::unique_ptr motion_device; DirectionState GetStickDirectionState(s16 circle_pad_x, s16 circle_pad_y) { // 30 degree and 60 degree are angular thresholds for directions @@ -90,6 +95,7 @@ static void LoadInputDevices() { buttons.begin(), Input::CreateDevice); circle_pad = Input::CreateDevice( Settings::values.analogs[Settings::NativeAnalog::CirclePad]); + motion_device = Input::CreateDevice(Settings::values.motion_device); } static void UnloadInputDevices() { @@ -97,6 +103,7 @@ static void UnloadInputDevices() { button.reset(); } circle_pad.reset(); + motion_device.reset(); } static void UpdatePadCallback(u64 userdata, int cycles_late) { @@ -193,10 +200,19 @@ static void UpdateAccelerometerCallback(u64 userdata, int cycles_late) { mem->accelerometer.index = next_accelerometer_index; next_accelerometer_index = (next_accelerometer_index + 1) % mem->accelerometer.entries.size(); + Math::Vec3 accel; + std::tie(accel, std::ignore) = motion_device->GetStatus(); + accel *= accelerometer_coef; + // TODO(wwylele): do a time stretch as it in UpdateGyroscopeCallback + // The time stretch formula should be like + // stretched_vector = (raw_vector - gravity) * stretch_ratio + gravity + AccelerometerDataEntry& accelerometer_entry = mem->accelerometer.entries[mem->accelerometer.index]; - std::tie(accelerometer_entry.x, accelerometer_entry.y, accelerometer_entry.z) = - VideoCore::g_emu_window->GetAccelerometerState(); + + accelerometer_entry.x = static_cast(accel.x); + accelerometer_entry.y = static_cast(accel.y); + accelerometer_entry.z = static_cast(accel.z); // Make up "raw" entry // TODO(wwylele): @@ -227,8 +243,14 @@ static void UpdateGyroscopeCallback(u64 userdata, int cycles_late) { next_gyroscope_index = (next_gyroscope_index + 1) % mem->gyroscope.entries.size(); GyroscopeDataEntry& gyroscope_entry = mem->gyroscope.entries[mem->gyroscope.index]; - std::tie(gyroscope_entry.x, gyroscope_entry.y, gyroscope_entry.z) = - VideoCore::g_emu_window->GetGyroscopeState(); + + Math::Vec3 gyro; + std::tie(std::ignore, gyro) = motion_device->GetStatus(); + float stretch = Core::System::GetInstance().perf_stats.GetLastFrameTimeScale(); + gyro *= gyroscope_coef * stretch; + gyroscope_entry.x = static_cast(gyro.x); + gyroscope_entry.y = static_cast(gyro.y); + gyroscope_entry.z = static_cast(gyro.z); // Make up "raw" entry mem->gyroscope.raw_entry.x = gyroscope_entry.x; @@ -326,7 +348,7 @@ void GetGyroscopeLowRawToDpsCoefficient(Service::Interface* self) { cmd_buff[1] = RESULT_SUCCESS.raw; - f32 coef = VideoCore::g_emu_window->GetGyroscopeRawToDpsCoefficient(); + f32 coef = gyroscope_coef; memcpy(&cmd_buff[2], &coef, 4); } diff --git a/src/core/settings.h b/src/core/settings.h index ee16bb90a8..7e15b119b7 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -79,6 +79,7 @@ struct Values { // Controls std::array buttons; std::array analogs; + std::string motion_device; // Core bool use_cpu_jit; From 188194908c2785bd1e03485941b9148777cdddd7 Mon Sep 17 00:00:00 2001 From: wwylele Date: Mon, 7 Aug 2017 00:04:06 +0300 Subject: [PATCH 067/195] move MotionEmu from core/frontend to input_common as a InputDevice --- src/citra/config.cpp | 3 + src/citra/default_ini.h | 8 +- src/citra/emu_window/emu_window_sdl2.cpp | 10 +- src/citra/emu_window/emu_window_sdl2.h | 4 - src/citra_qt/bootmanager.cpp | 10 +- src/citra_qt/bootmanager.h | 4 - src/citra_qt/configuration/config.cpp | 6 + src/core/CMakeLists.txt | 2 - src/core/frontend/emu_window.cpp | 23 --- src/core/frontend/emu_window.h | 83 --------- src/core/frontend/input.h | 9 +- src/core/frontend/motion_emu.cpp | 89 ---------- src/input_common/CMakeLists.txt | 2 + src/input_common/main.cpp | 15 +- src/input_common/main.h | 5 + src/input_common/motion_emu.cpp | 159 ++++++++++++++++++ .../frontend => input_common}/motion_emu.h | 33 ++-- 17 files changed, 221 insertions(+), 244 deletions(-) delete mode 100644 src/core/frontend/motion_emu.cpp create mode 100644 src/input_common/motion_emu.cpp rename src/{core/frontend => input_common}/motion_emu.h (50%) diff --git a/src/citra/config.cpp b/src/citra/config.cpp index 69247b1666..73846ed915 100644 --- a/src/citra/config.cpp +++ b/src/citra/config.cpp @@ -76,6 +76,9 @@ void Config::ReadValues() { Settings::values.analogs[i] = default_param; } + Settings::values.motion_device = sdl2_config->Get( + "Controls", "motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01"); + // Core Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true); diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h index b0a0ebd3b1..9ea779dd84 100644 --- a/src/citra/default_ini.h +++ b/src/citra/default_ini.h @@ -43,7 +43,7 @@ button_zr= button_home= # for analog input, the following devices are available: -# - "analog_from_button" (default) for emulating analog input from direction buttons. Required parameters: +# - "analog_from_button" (default) for emulating analog input from direction buttons. Required parameters: # - "up", "down", "left", "right": sub-devices for each direction. # Should be in the format as a button input devices using escape characters, for example, "engine$0keyboard$1code$00" # - "modifier": sub-devices as a modifier. @@ -56,6 +56,12 @@ button_home= circle_pad= c_stick= +# for motion input, the following devices are available: +# - "motion_emu" (default) for emulating motion input from mouse input. Required parameters: +# - "update_period": update period in milliseconds (default to 100) +# - "sensitivity": the coefficient converting mouse movement to tilting angle (default to 0.01) +motion_device= + [Core] # Whether to use the Just-In-Time (JIT) compiler for CPU emulation # 0: Interpreter (slow), 1 (default): JIT (fast) diff --git a/src/citra/emu_window/emu_window_sdl2.cpp b/src/citra/emu_window/emu_window_sdl2.cpp index b0f8083997..25643715a8 100644 --- a/src/citra/emu_window/emu_window_sdl2.cpp +++ b/src/citra/emu_window/emu_window_sdl2.cpp @@ -16,11 +16,12 @@ #include "core/settings.h" #include "input_common/keyboard.h" #include "input_common/main.h" +#include "input_common/motion_emu.h" #include "network/network.h" void EmuWindow_SDL2::OnMouseMotion(s32 x, s32 y) { TouchMoved((unsigned)std::max(x, 0), (unsigned)std::max(y, 0)); - motion_emu->Tilt(x, y); + InputCommon::GetMotionEmu()->Tilt(x, y); } void EmuWindow_SDL2::OnMouseButton(u32 button, u8 state, s32 x, s32 y) { @@ -32,9 +33,9 @@ void EmuWindow_SDL2::OnMouseButton(u32 button, u8 state, s32 x, s32 y) { } } else if (button == SDL_BUTTON_RIGHT) { if (state == SDL_PRESSED) { - motion_emu->BeginTilt(x, y); + InputCommon::GetMotionEmu()->BeginTilt(x, y); } else { - motion_emu->EndTilt(); + InputCommon::GetMotionEmu()->EndTilt(); } } } @@ -61,8 +62,6 @@ EmuWindow_SDL2::EmuWindow_SDL2() { InputCommon::Init(); Network::Init(); - motion_emu = std::make_unique(*this); - SDL_SetMainReady(); // Initialize the window @@ -117,7 +116,6 @@ EmuWindow_SDL2::EmuWindow_SDL2() { EmuWindow_SDL2::~EmuWindow_SDL2() { SDL_GL_DeleteContext(gl_context); SDL_Quit(); - motion_emu = nullptr; Network::Shutdown(); InputCommon::Shutdown(); diff --git a/src/citra/emu_window/emu_window_sdl2.h b/src/citra/emu_window/emu_window_sdl2.h index 1ce2991f7c..3664d2fbe2 100644 --- a/src/citra/emu_window/emu_window_sdl2.h +++ b/src/citra/emu_window/emu_window_sdl2.h @@ -7,7 +7,6 @@ #include #include #include "core/frontend/emu_window.h" -#include "core/frontend/motion_emu.h" struct SDL_Window; @@ -57,7 +56,4 @@ private: using SDL_GLContext = void*; /// The OpenGL context associated with the window SDL_GLContext gl_context; - - /// Motion sensors emulation - std::unique_ptr motion_emu; }; diff --git a/src/citra_qt/bootmanager.cpp b/src/citra_qt/bootmanager.cpp index 30554890f2..7107bfc60b 100644 --- a/src/citra_qt/bootmanager.cpp +++ b/src/citra_qt/bootmanager.cpp @@ -17,6 +17,7 @@ #include "core/settings.h" #include "input_common/keyboard.h" #include "input_common/main.h" +#include "input_common/motion_emu.h" #include "network/network.h" EmuThread::EmuThread(GRenderWindow* render_window) @@ -201,7 +202,6 @@ qreal GRenderWindow::windowPixelRatio() { } void GRenderWindow::closeEvent(QCloseEvent* event) { - motion_emu = nullptr; emit Closed(); QWidget::closeEvent(event); } @@ -221,7 +221,7 @@ void GRenderWindow::mousePressEvent(QMouseEvent* event) { this->TouchPressed(static_cast(pos.x() * pixelRatio), static_cast(pos.y() * pixelRatio)); } else if (event->button() == Qt::RightButton) { - motion_emu->BeginTilt(pos.x(), pos.y()); + InputCommon::GetMotionEmu()->BeginTilt(pos.x(), pos.y()); } } @@ -230,14 +230,14 @@ void GRenderWindow::mouseMoveEvent(QMouseEvent* event) { qreal pixelRatio = windowPixelRatio(); this->TouchMoved(std::max(static_cast(pos.x() * pixelRatio), 0u), std::max(static_cast(pos.y() * pixelRatio), 0u)); - motion_emu->Tilt(pos.x(), pos.y()); + InputCommon::GetMotionEmu()->Tilt(pos.x(), pos.y()); } void GRenderWindow::mouseReleaseEvent(QMouseEvent* event) { if (event->button() == Qt::LeftButton) this->TouchReleased(); else if (event->button() == Qt::RightButton) - motion_emu->EndTilt(); + InputCommon::GetMotionEmu()->EndTilt(); } void GRenderWindow::focusOutEvent(QFocusEvent* event) { @@ -290,13 +290,11 @@ void GRenderWindow::OnMinimalClientAreaChangeRequest( } void GRenderWindow::OnEmulationStarting(EmuThread* emu_thread) { - motion_emu = std::make_unique(*this); this->emu_thread = emu_thread; child->DisablePainting(); } void GRenderWindow::OnEmulationStopping() { - motion_emu = nullptr; emu_thread = nullptr; child->EnablePainting(); } diff --git a/src/citra_qt/bootmanager.h b/src/citra_qt/bootmanager.h index 4b3a3b3cc2..6974edcbb0 100644 --- a/src/citra_qt/bootmanager.h +++ b/src/citra_qt/bootmanager.h @@ -12,7 +12,6 @@ #include "common/thread.h" #include "core/core.h" #include "core/frontend/emu_window.h" -#include "core/frontend/motion_emu.h" class QKeyEvent; class QScreen; @@ -158,9 +157,6 @@ private: EmuThread* emu_thread; - /// Motion sensors emulation - std::unique_ptr motion_emu; - protected: void showEvent(QShowEvent* event) override; }; diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index 75abb4ce60..6e42db0072 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -57,6 +57,11 @@ void Config::ReadValues() { Settings::values.analogs[i] = default_param; } + Settings::values.motion_device = + qt_config->value("motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01") + .toString() + .toStdString(); + qt_config->endGroup(); qt_config->beginGroup("Core"); @@ -203,6 +208,7 @@ void Config::SaveValues() { qt_config->setValue(QString::fromStdString(Settings::NativeAnalog::mapping[i]), QString::fromStdString(Settings::values.analogs[i])); } + qt_config->setValue("motion_device", QString::fromStdString(Settings::values.motion_device)); qt_config->endGroup(); qt_config->beginGroup("Core"); diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 360f407f3d..ea36b7d955 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -33,7 +33,6 @@ set(SRCS frontend/camera/interface.cpp frontend/emu_window.cpp frontend/framebuffer_layout.cpp - frontend/motion_emu.cpp gdbstub/gdbstub.cpp hle/config_mem.cpp hle/applets/applet.cpp @@ -226,7 +225,6 @@ set(HEADERS frontend/emu_window.h frontend/framebuffer_layout.h frontend/input.h - frontend/motion_emu.h gdbstub/gdbstub.h hle/config_mem.h hle/function_wrappers.h diff --git a/src/core/frontend/emu_window.cpp b/src/core/frontend/emu_window.cpp index 4f7d54a33a..60b20d4e2c 100644 --- a/src/core/frontend/emu_window.cpp +++ b/src/core/frontend/emu_window.cpp @@ -62,29 +62,6 @@ void EmuWindow::TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y) { TouchPressed(framebuffer_x, framebuffer_y); } -void EmuWindow::AccelerometerChanged(float x, float y, float z) { - constexpr float coef = 512; - - std::lock_guard lock(accel_mutex); - - // TODO(wwylele): do a time stretch as it in GyroscopeChanged - // The time stretch formula should be like - // stretched_vector = (raw_vector - gravity) * stretch_ratio + gravity - accel_x = static_cast(x * coef); - accel_y = static_cast(y * coef); - accel_z = static_cast(z * coef); -} - -void EmuWindow::GyroscopeChanged(float x, float y, float z) { - constexpr float FULL_FPS = 60; - float coef = GetGyroscopeRawToDpsCoefficient(); - float stretch = Core::System::GetInstance().perf_stats.GetLastFrameTimeScale(); - std::lock_guard lock(gyro_mutex); - gyro_x = static_cast(x * coef * stretch); - gyro_y = static_cast(y * coef * stretch); - gyro_z = static_cast(z * coef * stretch); -} - void EmuWindow::UpdateCurrentFramebufferLayout(unsigned width, unsigned height) { Layout::FramebufferLayout layout; if (Settings::values.custom_layout == true) { diff --git a/src/core/frontend/emu_window.h b/src/core/frontend/emu_window.h index 9414123a46..7bdee251c2 100644 --- a/src/core/frontend/emu_window.h +++ b/src/core/frontend/emu_window.h @@ -68,27 +68,6 @@ public: */ void TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y); - /** - * Signal accelerometer state has changed. - * @param x X-axis accelerometer value - * @param y Y-axis accelerometer value - * @param z Z-axis accelerometer value - * @note all values are in unit of g (gravitational acceleration). - * e.g. x = 1.0 means 9.8m/s^2 in x direction. - * @see GetAccelerometerState for axis explanation. - */ - void AccelerometerChanged(float x, float y, float z); - - /** - * Signal gyroscope state has changed. - * @param x X-axis accelerometer value - * @param y Y-axis accelerometer value - * @param z Z-axis accelerometer value - * @note all values are in deg/sec. - * @see GetGyroscopeState for axis explanation. - */ - void GyroscopeChanged(float x, float y, float z); - /** * Gets the current touch screen state (touch X/Y coordinates and whether or not it is pressed). * @note This should be called by the core emu thread to get a state set by the window thread. @@ -100,52 +79,6 @@ public: return std::make_tuple(touch_x, touch_y, touch_pressed); } - /** - * Gets the current accelerometer state (acceleration along each three axis). - * Axis explained: - * +x is the same direction as LEFT on D-pad. - * +y is normal to the touch screen, pointing outward. - * +z is the same direction as UP on D-pad. - * Units: - * 1 unit of return value = 1/512 g (measured by hw test), - * where g is the gravitational acceleration (9.8 m/sec2). - * @note This should be called by the core emu thread to get a state set by the window thread. - * @return std::tuple of (x, y, z) - */ - std::tuple GetAccelerometerState() { - std::lock_guard lock(accel_mutex); - return std::make_tuple(accel_x, accel_y, accel_z); - } - - /** - * Gets the current gyroscope state (angular rates about each three axis). - * Axis explained: - * +x is the same direction as LEFT on D-pad. - * +y is normal to the touch screen, pointing outward. - * +z is the same direction as UP on D-pad. - * Orientation is determined by right-hand rule. - * Units: - * 1 unit of return value = (1/coef) deg/sec, - * where coef is the return value of GetGyroscopeRawToDpsCoefficient(). - * @note This should be called by the core emu thread to get a state set by the window thread. - * @return std::tuple of (x, y, z) - */ - std::tuple GetGyroscopeState() { - std::lock_guard lock(gyro_mutex); - return std::make_tuple(gyro_x, gyro_y, gyro_z); - } - - /** - * Gets the coefficient for units conversion of gyroscope state. - * The conversion formula is r = coefficient * v, - * where v is angular rate in deg/sec, - * and r is the gyroscope state. - * @return float-type coefficient - */ - f32 GetGyroscopeRawToDpsCoefficient() const { - return 14.375f; // taken from hw test, and gyroscope's document - } - /** * Returns currently active configuration. * @note Accesses to the returned object need not be consistent because it may be modified in @@ -187,12 +120,6 @@ protected: touch_x = 0; touch_y = 0; touch_pressed = false; - accel_x = 0; - accel_y = -512; - accel_z = 0; - gyro_x = 0; - gyro_y = 0; - gyro_z = 0; } virtual ~EmuWindow() {} @@ -255,16 +182,6 @@ private: u16 touch_x; ///< Touchpad X-position in native 3DS pixel coordinates (0-320) u16 touch_y; ///< Touchpad Y-position in native 3DS pixel coordinates (0-240) - std::mutex accel_mutex; - s16 accel_x; ///< Accelerometer X-axis value in native 3DS units - s16 accel_y; ///< Accelerometer Y-axis value in native 3DS units - s16 accel_z; ///< Accelerometer Z-axis value in native 3DS units - - std::mutex gyro_mutex; - s16 gyro_x; ///< Gyroscope X-axis value in native 3DS units - s16 gyro_y; ///< Gyroscope Y-axis value in native 3DS units - s16 gyro_z; ///< Gyroscope Z-axis value in native 3DS units - /** * Clip the provided coordinates to be inside the touchscreen area. */ diff --git a/src/core/frontend/input.h b/src/core/frontend/input.h index a8be494405..5916a901de 100644 --- a/src/core/frontend/input.h +++ b/src/core/frontend/input.h @@ -112,16 +112,15 @@ using AnalogDevice = InputDevice>; * A motion device is an input device that returns a tuple of accelerometer state vector and * gyroscope state vector. * - * For accelerometer state vector: + * For both vectors: * x+ is the same direction as LEFT on D-pad. * y+ is normal to the touch screen, pointing outward. * z+ is the same direction as UP on D-pad. - * Units: measured in unit of gravitational acceleration + * + * For accelerometer state vector + * Units: g (gravitational acceleration) * * For gyroscope state vector: - * x+ is the same direction as LEFT on D-pad. - * y+ is normal to the touch screen, pointing outward. - * z+ is the same direction as UP on D-pad. * Orientation is determined by right-hand rule. * Units: deg/sec */ diff --git a/src/core/frontend/motion_emu.cpp b/src/core/frontend/motion_emu.cpp deleted file mode 100644 index 9a5b3185d2..0000000000 --- a/src/core/frontend/motion_emu.cpp +++ /dev/null @@ -1,89 +0,0 @@ -// Copyright 2016 Citra Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#include "common/math_util.h" -#include "common/quaternion.h" -#include "core/frontend/emu_window.h" -#include "core/frontend/motion_emu.h" - -namespace Motion { - -static constexpr int update_millisecond = 100; -static constexpr auto update_duration = - std::chrono::duration_cast( - std::chrono::milliseconds(update_millisecond)); - -MotionEmu::MotionEmu(EmuWindow& emu_window) - : motion_emu_thread(&MotionEmu::MotionEmuThread, this, std::ref(emu_window)) {} - -MotionEmu::~MotionEmu() { - if (motion_emu_thread.joinable()) { - shutdown_event.Set(); - motion_emu_thread.join(); - } -} - -void MotionEmu::MotionEmuThread(EmuWindow& emu_window) { - auto update_time = std::chrono::steady_clock::now(); - Math::Quaternion q = MakeQuaternion(Math::Vec3(), 0); - Math::Quaternion old_q; - - while (!shutdown_event.WaitUntil(update_time)) { - update_time += update_duration; - old_q = q; - - { - std::lock_guard guard(tilt_mutex); - - // Find the quaternion describing current 3DS tilting - q = MakeQuaternion(Math::MakeVec(-tilt_direction.y, 0.0f, tilt_direction.x), - tilt_angle); - } - - auto inv_q = q.Inverse(); - - // Set the gravity vector in world space - auto gravity = Math::MakeVec(0.0f, -1.0f, 0.0f); - - // Find the angular rate vector in world space - auto angular_rate = ((q - old_q) * inv_q).xyz * 2; - angular_rate *= 1000 / update_millisecond / MathUtil::PI * 180; - - // Transform the two vectors from world space to 3DS space - gravity = QuaternionRotate(inv_q, gravity); - angular_rate = QuaternionRotate(inv_q, angular_rate); - - // Update the sensor state - emu_window.AccelerometerChanged(gravity.x, gravity.y, gravity.z); - emu_window.GyroscopeChanged(angular_rate.x, angular_rate.y, angular_rate.z); - } -} - -void MotionEmu::BeginTilt(int x, int y) { - mouse_origin = Math::MakeVec(x, y); - is_tilting = true; -} - -void MotionEmu::Tilt(int x, int y) { - constexpr float SENSITIVITY = 0.01f; - auto mouse_move = Math::MakeVec(x, y) - mouse_origin; - if (is_tilting) { - std::lock_guard guard(tilt_mutex); - if (mouse_move.x == 0 && mouse_move.y == 0) { - tilt_angle = 0; - } else { - tilt_direction = mouse_move.Cast(); - tilt_angle = MathUtil::Clamp(tilt_direction.Normalize() * SENSITIVITY, 0.0f, - MathUtil::PI * 0.5f); - } - } -} - -void MotionEmu::EndTilt() { - std::lock_guard guard(tilt_mutex); - tilt_angle = 0; - is_tilting = false; -} - -} // namespace Motion diff --git a/src/input_common/CMakeLists.txt b/src/input_common/CMakeLists.txt index e3e36ada70..92792a7021 100644 --- a/src/input_common/CMakeLists.txt +++ b/src/input_common/CMakeLists.txt @@ -2,12 +2,14 @@ set(SRCS analog_from_button.cpp keyboard.cpp main.cpp + motion_emu.cpp ) set(HEADERS analog_from_button.h keyboard.h main.h + motion_emu.h ) if(SDL2_FOUND) diff --git a/src/input_common/main.cpp b/src/input_common/main.cpp index 699f41e6bc..5573537408 100644 --- a/src/input_common/main.cpp +++ b/src/input_common/main.cpp @@ -7,6 +7,7 @@ #include "input_common/analog_from_button.h" #include "input_common/keyboard.h" #include "input_common/main.h" +#include "input_common/motion_emu.h" #ifdef HAVE_SDL2 #include "input_common/sdl/sdl.h" #endif @@ -14,12 +15,16 @@ namespace InputCommon { static std::shared_ptr keyboard; +static std::shared_ptr motion_emu; void Init() { - keyboard = std::make_shared(); + keyboard = std::make_shared(); Input::RegisterFactory("keyboard", keyboard); Input::RegisterFactory("analog_from_button", - std::make_shared()); + std::make_shared()); + motion_emu = std::make_shared(); + Input::RegisterFactory("motion_emu", motion_emu); + #ifdef HAVE_SDL2 SDL::Init(); #endif @@ -29,6 +34,8 @@ void Shutdown() { Input::UnregisterFactory("keyboard"); keyboard.reset(); Input::UnregisterFactory("analog_from_button"); + Input::UnregisterFactory("motion_emu"); + motion_emu.reset(); #ifdef HAVE_SDL2 SDL::Shutdown(); @@ -39,6 +46,10 @@ Keyboard* GetKeyboard() { return keyboard.get(); } +MotionEmu* GetMotionEmu() { + return motion_emu.get(); +} + std::string GenerateKeyboardParam(int key_code) { Common::ParamPackage param{ {"engine", "keyboard"}, {"code", std::to_string(key_code)}, diff --git a/src/input_common/main.h b/src/input_common/main.h index 140bbd0145..74283f7c6c 100644 --- a/src/input_common/main.h +++ b/src/input_common/main.h @@ -19,6 +19,11 @@ class Keyboard; /// Gets the keyboard button device factory. Keyboard* GetKeyboard(); +class MotionEmu; + +/// Gets the motion emulation factory. +MotionEmu* GetMotionEmu(); + /// Generates a serialized param package for creating a keyboard button device std::string GenerateKeyboardParam(int key_code); diff --git a/src/input_common/motion_emu.cpp b/src/input_common/motion_emu.cpp new file mode 100644 index 0000000000..65e80529d3 --- /dev/null +++ b/src/input_common/motion_emu.cpp @@ -0,0 +1,159 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "common/math_util.h" +#include "common/quaternion.h" +#include "input_common/motion_emu.h" + +namespace InputCommon { + +// Implementation class of the motion emulation device +class MotionEmuDevice { +public: + MotionEmuDevice(int update_millisecond, float sensitivity) + : update_millisecond(update_millisecond), + update_duration(std::chrono::duration_cast( + std::chrono::milliseconds(update_millisecond))), + sensitivity(sensitivity), motion_emu_thread(&MotionEmuDevice::MotionEmuThread, this) {} + + ~MotionEmuDevice() { + if (motion_emu_thread.joinable()) { + shutdown_event.Set(); + motion_emu_thread.join(); + } + } + + void BeginTilt(int x, int y) { + mouse_origin = Math::MakeVec(x, y); + is_tilting = true; + } + + void Tilt(int x, int y) { + auto mouse_move = Math::MakeVec(x, y) - mouse_origin; + if (is_tilting) { + std::lock_guard guard(tilt_mutex); + if (mouse_move.x == 0 && mouse_move.y == 0) { + tilt_angle = 0; + } else { + tilt_direction = mouse_move.Cast(); + tilt_angle = MathUtil::Clamp(tilt_direction.Normalize() * sensitivity, 0.0f, + MathUtil::PI * 0.5f); + } + } + } + + void EndTilt() { + std::lock_guard guard(tilt_mutex); + tilt_angle = 0; + is_tilting = false; + } + + std::tuple, Math::Vec3> GetStatus() { + std::lock_guard guard(status_mutex); + return status; + } + +private: + const int update_millisecond; + const std::chrono::steady_clock::duration update_duration; + const float sensitivity; + + Math::Vec2 mouse_origin; + + std::mutex tilt_mutex; + Math::Vec2 tilt_direction; + float tilt_angle = 0; + + bool is_tilting = false; + + Common::Event shutdown_event; + std::thread motion_emu_thread; + + std::tuple, Math::Vec3> status; + std::mutex status_mutex; + + void MotionEmuThread() { + auto update_time = std::chrono::steady_clock::now(); + Math::Quaternion q = MakeQuaternion(Math::Vec3(), 0); + Math::Quaternion old_q; + + while (!shutdown_event.WaitUntil(update_time)) { + update_time += update_duration; + old_q = q; + + { + std::lock_guard guard(tilt_mutex); + + // Find the quaternion describing current 3DS tilting + q = MakeQuaternion(Math::MakeVec(-tilt_direction.y, 0.0f, tilt_direction.x), + tilt_angle); + } + + auto inv_q = q.Inverse(); + + // Set the gravity vector in world space + auto gravity = Math::MakeVec(0.0f, -1.0f, 0.0f); + + // Find the angular rate vector in world space + auto angular_rate = ((q - old_q) * inv_q).xyz * 2; + angular_rate *= 1000 / update_millisecond / MathUtil::PI * 180; + + // Transform the two vectors from world space to 3DS space + gravity = QuaternionRotate(inv_q, gravity); + angular_rate = QuaternionRotate(inv_q, angular_rate); + + // Update the sensor state + { + std::lock_guard guard(status_mutex); + status = std::make_tuple(gravity, angular_rate); + } + } + } +}; + +// Interface wrapper held by input receiver as a unique_ptr. It holds the implementation class as +// a shared_ptr, which is also observed by the factory class as a weak_ptr. In this way the factory +// can forward all the inputs to the implementation only when it is valid. +class MotionEmuDeviceWrapper : public Input::MotionDevice { +public: + MotionEmuDeviceWrapper(int update_millisecond, float sensitivity) { + device = std::make_shared(update_millisecond, sensitivity); + } + + std::tuple, Math::Vec3> GetStatus() const { + return device->GetStatus(); + } + + std::shared_ptr device; +}; + +std::unique_ptr MotionEmu::Create(const Common::ParamPackage& params) { + int update_period = params.Get("update_period", 100); + float sensitivity = params.Get("sensitivity", 0.01f); + auto device_wrapper = std::make_unique(update_period, sensitivity); + // Previously created device is disconnected here. Having two motion devices for 3DS is not + // expected. + current_device = device_wrapper->device; + return std::move(device_wrapper); +} + +void MotionEmu::BeginTilt(int x, int y) { + if (auto ptr = current_device.lock()) { + ptr->BeginTilt(x, y); + } +} + +void MotionEmu::Tilt(int x, int y) { + if (auto ptr = current_device.lock()) { + ptr->Tilt(x, y); + } +} + +void MotionEmu::EndTilt() { + if (auto ptr = current_device.lock()) { + ptr->EndTilt(); + } +} + +} // namespace InputCommon diff --git a/src/core/frontend/motion_emu.h b/src/input_common/motion_emu.h similarity index 50% rename from src/core/frontend/motion_emu.h rename to src/input_common/motion_emu.h index 99d41a7264..195fb69d25 100644 --- a/src/core/frontend/motion_emu.h +++ b/src/input_common/motion_emu.h @@ -1,19 +1,25 @@ -// Copyright 2016 Citra Emulator Project +// Copyright 2017 Citra Emulator Project // Licensed under GPLv2 or any later version // Refer to the license.txt file included. #pragma once #include "common/thread.h" #include "common/vector_math.h" +#include "core/frontend/input.h" -class EmuWindow; +namespace InputCommon { -namespace Motion { +class MotionEmuDevice; -class MotionEmu final { +class MotionEmu : public Input::Factory { public: - MotionEmu(EmuWindow& emu_window); - ~MotionEmu(); + /** + * Creates a motion device emulated from mouse input + * @param params contains parameters for creating the device: + * - "update_period": update period in milliseconds + * - "sensitivity": the coefficient converting mouse movement to tilting angle + */ + std::unique_ptr Create(const Common::ParamPackage& params) override; /** * Signals that a motion sensor tilt has begun. @@ -35,18 +41,7 @@ public: void EndTilt(); private: - Math::Vec2 mouse_origin; - - std::mutex tilt_mutex; - Math::Vec2 tilt_direction; - float tilt_angle = 0; - - bool is_tilting = false; - - Common::Event shutdown_event; - std::thread motion_emu_thread; - - void MotionEmuThread(EmuWindow& emu_window); + std::weak_ptr current_device; }; -} // namespace Motion +} // namespace InputCommon From 686fb3e78cb394bb7db18fd951d104ca86d805d9 Mon Sep 17 00:00:00 2001 From: wwylele Date: Fri, 11 Aug 2017 18:24:24 +0300 Subject: [PATCH 068/195] gl_shader_gen: don't call SampleTexture when bump map is not used --- src/video_core/renderer_opengl/gl_shader_gen.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index bb192affd2..ae67aab052 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -525,11 +525,12 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) { "float geo_factor = 1.0;\n"; // Compute fragment normals and tangents - const std::string pertubation = - "2.0 * (" + SampleTexture(config, lighting.bump_selector) + ").rgb - 1.0"; + auto Perturbation = [&]() { + return "2.0 * (" + SampleTexture(config, lighting.bump_selector) + ").rgb - 1.0"; + }; if (lighting.bump_mode == LightingRegs::LightingBumpMode::NormalMap) { // Bump mapping is enabled using a normal map - out += "vec3 surface_normal = " + pertubation + ";\n"; + out += "vec3 surface_normal = " + Perturbation() + ";\n"; // Recompute Z-component of perturbation if 'renorm' is enabled, this provides a higher // precision result @@ -543,7 +544,7 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) { out += "vec3 surface_tangent = vec3(1.0, 0.0, 0.0);\n"; } else if (lighting.bump_mode == LightingRegs::LightingBumpMode::TangentMap) { // Bump mapping is enabled using a tangent map - out += "vec3 surface_tangent = " + pertubation + ";\n"; + out += "vec3 surface_tangent = " + Perturbation() + ";\n"; // Mathematically, recomputing Z-component of the tangent vector won't affect the relevant // computation below, which is also confirmed on 3DS. So we don't bother recomputing here // even if 'renorm' is enabled. From bf71fc03422fd783fe0f841c93638d4e3d0e70ea Mon Sep 17 00:00:00 2001 From: Dave Leaver Date: Mon, 14 Aug 2017 09:15:39 +1200 Subject: [PATCH 069/195] Fix Spelling/English mistakes --- src/input_common/main.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/input_common/main.h b/src/input_common/main.h index 140bbd0145..e7fb3890ed 100644 --- a/src/input_common/main.h +++ b/src/input_common/main.h @@ -11,7 +11,7 @@ namespace InputCommon { /// Initializes and registers all built-in input device factories. void Init(); -/// Unresisters all build-in input device factories and shut them down. +/// Deregisters all built-in input device factories and shuts them down. void Shutdown(); class Keyboard; From b67c2dc82cff794fc1989e103daa96f5ff5f12be Mon Sep 17 00:00:00 2001 From: MerryMage Date: Tue, 15 Aug 2017 10:16:50 +0100 Subject: [PATCH 070/195] dsp_dsp: Remove size assertion in LoadComponent --- src/core/hle/service/dsp_dsp.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/core/hle/service/dsp_dsp.cpp b/src/core/hle/service/dsp_dsp.cpp index 7d746054f6..42f8950f9f 100644 --- a/src/core/hle/service/dsp_dsp.cpp +++ b/src/core/hle/service/dsp_dsp.cpp @@ -147,9 +147,10 @@ static void LoadComponent(Service::Interface* self) { LOG_INFO(Service_DSP, "Firmware hash: %#" PRIx64, Common::ComputeHash64(component_data.data(), component_data.size())); // Some versions of the firmware have the location of DSP structures listed here. - ASSERT(size > 0x37C); - LOG_INFO(Service_DSP, "Structures hash: %#" PRIx64, - Common::ComputeHash64(component_data.data() + 0x340, 60)); + if (size > 0x37C) { + LOG_INFO(Service_DSP, "Structures hash: %#" PRIx64, + Common::ComputeHash64(component_data.data() + 0x340, 60)); + } LOG_WARNING(Service_DSP, "(STUBBED) called size=0x%X, prog_mask=0x%08X, data_mask=0x%08X, buffer=0x%08X", From 223bd354508a7bc88427d5b6f5245cfdf44011c7 Mon Sep 17 00:00:00 2001 From: wwylele Date: Wed, 9 Aug 2017 03:05:03 +0300 Subject: [PATCH 071/195] motion_emu: no need to include thread in header --- src/input_common/motion_emu.cpp | 6 ++++++ src/input_common/motion_emu.h | 3 +-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/input_common/motion_emu.cpp b/src/input_common/motion_emu.cpp index 65e80529d3..a1761f1846 100644 --- a/src/input_common/motion_emu.cpp +++ b/src/input_common/motion_emu.cpp @@ -2,8 +2,14 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include +#include +#include +#include #include "common/math_util.h" #include "common/quaternion.h" +#include "common/thread.h" +#include "common/vector_math.h" #include "input_common/motion_emu.h" namespace InputCommon { diff --git a/src/input_common/motion_emu.h b/src/input_common/motion_emu.h index 195fb69d25..7a7e224672 100644 --- a/src/input_common/motion_emu.h +++ b/src/input_common/motion_emu.h @@ -3,8 +3,7 @@ // Refer to the license.txt file included. #pragma once -#include "common/thread.h" -#include "common/vector_math.h" + #include "core/frontend/input.h" namespace InputCommon { From 46c6973d2bde25a2a8ae9ac434660798fd1dfaee Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 25 Jul 2017 22:30:29 +0300 Subject: [PATCH 072/195] pica/shader: extend UnitState for GS Among four shader units in pica, a special unit can be configured to run both VS and GS program. GSUnitState represents this unit, which extends UnitState (which represents the other three normal units) with extra state for primitive emitting. It uses lots of raw pointers to represent internal structure in order to keep it standard layout type for JIT to access. This unit doesn't handle triangle winding (inverting) itself; instead, it calls a WindingSetter handler. This will be explained in the following commits --- src/video_core/shader/shader.cpp | 38 ++++++++++++++++++++++++++ src/video_core/shader/shader.h | 46 ++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp index 67ed19ba8d..b12468d3a5 100644 --- a/src/video_core/shader/shader.cpp +++ b/src/video_core/shader/shader.cpp @@ -82,6 +82,44 @@ void UnitState::WriteOutput(const ShaderRegs& config, AttributeBuffer& output) { } } +UnitState::UnitState(GSEmitter* emitter) : emitter_ptr(emitter) {} + +GSEmitter::GSEmitter() { + handlers = new Handlers; +} + +GSEmitter::~GSEmitter() { + delete handlers; +} + +void GSEmitter::Emit(Math::Vec4 (&vertex)[16]) { + ASSERT(vertex_id < 3); + std::copy(std::begin(vertex), std::end(vertex), buffer[vertex_id].begin()); + if (prim_emit) { + if (winding) + handlers->winding_setter(); + for (size_t i = 0; i < buffer.size(); ++i) { + AttributeBuffer output; + unsigned int output_i = 0; + for (unsigned int reg : Common::BitSet(output_mask)) { + output.attr[output_i++] = buffer[i][reg]; + } + handlers->vertex_handler(output); + } + } +} + +GSUnitState::GSUnitState() : UnitState(&emitter) {} + +void GSUnitState::SetVertexHandler(VertexHandler vertex_handler, WindingSetter winding_setter) { + emitter.handlers->vertex_handler = std::move(vertex_handler); + emitter.handlers->winding_setter = std::move(winding_setter); +} + +void GSUnitState::ConfigOutput(const ShaderRegs& config) { + emitter.output_mask = config.output_mask; +} + MICROPROFILE_DEFINE(GPU_Shader, "GPU", "Shader", MP_RGB(50, 50, 240)); #ifdef ARCHITECTURE_x86_64 diff --git a/src/video_core/shader/shader.h b/src/video_core/shader/shader.h index e156f6aef0..caec960434 100644 --- a/src/video_core/shader/shader.h +++ b/src/video_core/shader/shader.h @@ -6,6 +6,7 @@ #include #include +#include #include #include #include "common/assert.h" @@ -31,6 +32,12 @@ struct AttributeBuffer { alignas(16) Math::Vec4 attr[16]; }; +/// Handler type for receiving vertex outputs from vertex shader or geometry shader +using VertexHandler = std::function; + +/// Handler type for signaling to invert the vertex order of the next triangle +using WindingSetter = std::function; + struct OutputVertex { Math::Vec4 pos; Math::Vec4 quat; @@ -60,6 +67,29 @@ ASSERT_POS(tc2, RasterizerRegs::VSOutputAttributes::TEXCOORD2_U); static_assert(std::is_pod::value, "Structure is not POD"); static_assert(sizeof(OutputVertex) == 24 * sizeof(float), "OutputVertex has invalid size"); +/** + * This structure contains state information for primitive emitting in geometry shader. + */ +struct GSEmitter { + std::array, 16>, 3> buffer; + u8 vertex_id; + bool prim_emit; + bool winding; + u32 output_mask; + + // Function objects are hidden behind a raw pointer to make the structure standard layout type, + // for JIT to use offsetof to access other members. + struct Handlers { + VertexHandler vertex_handler; + WindingSetter winding_setter; + } * handlers; + + GSEmitter(); + ~GSEmitter(); + void Emit(Math::Vec4 (&vertex)[16]); +}; +static_assert(std::is_standard_layout::value, "GSEmitter is not standard layout type"); + /** * This structure contains the state information that needs to be unique for a shader unit. The 3DS * has four shader units that process shaders in parallel. At the present, Citra only implements a @@ -67,6 +97,7 @@ static_assert(sizeof(OutputVertex) == 24 * sizeof(float), "OutputVertex has inva * here will make it easier for us to parallelize the shader processing later. */ struct UnitState { + explicit UnitState(GSEmitter* emitter = nullptr); struct Registers { // The registers are accessed by the shader JIT using SSE instructions, and are therefore // required to be 16-byte aligned. @@ -82,6 +113,8 @@ struct UnitState { // TODO: How many bits do these actually have? s32 address_registers[3]; + GSEmitter* emitter_ptr; + static size_t InputOffset(const SourceRegister& reg) { switch (reg.GetRegisterType()) { case RegisterType::Input: @@ -125,6 +158,19 @@ struct UnitState { void WriteOutput(const ShaderRegs& config, AttributeBuffer& output); }; +/** + * This is an extended shader unit state that represents the special unit that can run both vertex + * shader and geometry shader. It contains an additional primitive emitter and utilities for + * geometry shader. + */ +struct GSUnitState : public UnitState { + GSUnitState(); + void SetVertexHandler(VertexHandler vertex_handler, WindingSetter winding_setter); + void ConfigOutput(const ShaderRegs& config); + + GSEmitter emitter; +}; + struct ShaderSetup { struct { // The float uniforms are accessed by the shader JIT using SSE instructions, and are From 28128348f21d83c30979ef10399a8a764bb08a73 Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 25 Jul 2017 22:43:25 +0300 Subject: [PATCH 073/195] pica/shader/interpreter: implement SETEMIT and EMIT --- src/video_core/shader/shader_interpreter.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/video_core/shader/shader_interpreter.cpp b/src/video_core/shader/shader_interpreter.cpp index 206c0978ad..9d4da4904a 100644 --- a/src/video_core/shader/shader_interpreter.cpp +++ b/src/video_core/shader/shader_interpreter.cpp @@ -636,6 +636,22 @@ static void RunInterpreter(const ShaderSetup& setup, UnitState& state, DebugData break; } + case OpCode::Id::EMIT: { + GSEmitter* emitter = state.emitter_ptr; + ASSERT_MSG(emitter, "Execute EMIT on VS"); + emitter->Emit(state.registers.output); + break; + } + + case OpCode::Id::SETEMIT: { + GSEmitter* emitter = state.emitter_ptr; + ASSERT_MSG(emitter, "Execute SETEMIT on VS"); + emitter->vertex_id = instr.setemit.vertex_id; + emitter->prim_emit = instr.setemit.prim_emit != 0; + emitter->winding = instr.setemit.winding != 0; + break; + } + default: LOG_ERROR(HW_GPU, "Unhandled instruction: 0x%02x (%s): 0x%08x", (int)instr.opcode.Value().EffectiveOpCode(), From bb63ae305279d9a73ea70133c89e92a36dc79f69 Mon Sep 17 00:00:00 2001 From: wwylele Date: Wed, 26 Jul 2017 00:39:43 +0300 Subject: [PATCH 074/195] correct constness --- src/video_core/shader/shader.cpp | 3 ++- src/video_core/shader/shader.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp index b12468d3a5..e9063e6164 100644 --- a/src/video_core/shader/shader.cpp +++ b/src/video_core/shader/shader.cpp @@ -21,7 +21,8 @@ namespace Pica { namespace Shader { -OutputVertex OutputVertex::FromAttributeBuffer(const RasterizerRegs& regs, AttributeBuffer& input) { +OutputVertex OutputVertex::FromAttributeBuffer(const RasterizerRegs& regs, + const AttributeBuffer& input) { // Setup output data union { OutputVertex ret{}; diff --git a/src/video_core/shader/shader.h b/src/video_core/shader/shader.h index caec960434..a3789da012 100644 --- a/src/video_core/shader/shader.h +++ b/src/video_core/shader/shader.h @@ -50,7 +50,8 @@ struct OutputVertex { INSERT_PADDING_WORDS(1); Math::Vec2 tc2; - static OutputVertex FromAttributeBuffer(const RasterizerRegs& regs, AttributeBuffer& output); + static OutputVertex FromAttributeBuffer(const RasterizerRegs& regs, + const AttributeBuffer& output); }; #define ASSERT_POS(var, pos) \ static_assert(offsetof(OutputVertex, var) == pos * sizeof(float24), "Semantic at wrong " \ From 36981a5aa6ffcc10417e533ab00de3b6f9bad067 Mon Sep 17 00:00:00 2001 From: wwylele Date: Wed, 26 Jul 2017 15:07:13 +0300 Subject: [PATCH 075/195] pica/primitive_assembly: Handle winding for GS primitive hwtest shows that, although GS always emit a group of three vertices as one primitive, it still respects to the topology type, as if the three vertices are input into the primitive assembler independently and sequentially. It is also shown that the winding flag in SETEMIT only takes effect for Shader topology type, which is believed to be the actual difference between List and Shader (hence removed the TODO). However, only Shader topology type is observed in official games when GS is in use, so the other mode seems to be just unintended usage. --- src/video_core/primitive_assembly.cpp | 15 ++++++++++++--- src/video_core/primitive_assembly.h | 7 +++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/video_core/primitive_assembly.cpp b/src/video_core/primitive_assembly.cpp index acd2ac5e23..9c3dd4cabd 100644 --- a/src/video_core/primitive_assembly.cpp +++ b/src/video_core/primitive_assembly.cpp @@ -17,15 +17,18 @@ template void PrimitiveAssembler::SubmitVertex(const VertexType& vtx, TriangleHandler triangle_handler) { switch (topology) { - // TODO: Figure out what's different with TriangleTopology::Shader. case PipelineRegs::TriangleTopology::List: case PipelineRegs::TriangleTopology::Shader: if (buffer_index < 2) { buffer[buffer_index++] = vtx; } else { buffer_index = 0; - - triangle_handler(buffer[0], buffer[1], vtx); + if (topology == PipelineRegs::TriangleTopology::Shader && winding) { + triangle_handler(buffer[1], buffer[0], vtx); + winding = false; + } else { + triangle_handler(buffer[0], buffer[1], vtx); + } } break; @@ -50,10 +53,16 @@ void PrimitiveAssembler::SubmitVertex(const VertexType& vtx, } } +template +void PrimitiveAssembler::SetWinding() { + winding = true; +} + template void PrimitiveAssembler::Reset() { buffer_index = 0; strip_ready = false; + winding = false; } template diff --git a/src/video_core/primitive_assembly.h b/src/video_core/primitive_assembly.h index e8eccdf276..12de8e3b96 100644 --- a/src/video_core/primitive_assembly.h +++ b/src/video_core/primitive_assembly.h @@ -29,6 +29,12 @@ struct PrimitiveAssembler { */ void SubmitVertex(const VertexType& vtx, TriangleHandler triangle_handler); + /** + * Invert the vertex order of the next triangle. Called by geometry shader emitter. + * This only takes effect for TriangleTopology::Shader. + */ + void SetWinding(); + /** * Resets the internal state of the PrimitiveAssembler. */ @@ -45,6 +51,7 @@ private: int buffer_index; VertexType buffer[2]; bool strip_ready = false; + bool winding = false; }; } // namespace From 8285ca4ad8f9a5d07c9a2ba91367fcf3756f5153 Mon Sep 17 00:00:00 2001 From: wwylele Date: Wed, 26 Jul 2017 18:44:52 +0300 Subject: [PATCH 076/195] pica/shader/jit: implement SETEMIT and EMIT --- .../shader/shader_jit_x64_compiler.cpp | 49 ++++++++++++++++++- .../shader/shader_jit_x64_compiler.h | 2 + 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/video_core/shader/shader_jit_x64_compiler.cpp b/src/video_core/shader/shader_jit_x64_compiler.cpp index 42a57aab19..1b31623bd5 100644 --- a/src/video_core/shader/shader_jit_x64_compiler.cpp +++ b/src/video_core/shader/shader_jit_x64_compiler.cpp @@ -75,8 +75,8 @@ const JitFunction instr_table[64] = { &JitShader::Compile_IF, // ifu &JitShader::Compile_IF, // ifc &JitShader::Compile_LOOP, // loop - nullptr, // emit - nullptr, // sete + &JitShader::Compile_EMIT, // emit + &JitShader::Compile_SETE, // sete &JitShader::Compile_JMP, // jmpc &JitShader::Compile_JMP, // jmpu &JitShader::Compile_CMP, // cmp @@ -772,6 +772,51 @@ void JitShader::Compile_JMP(Instruction instr) { } } +static void Emit(GSEmitter* emitter, Math::Vec4 (*output)[16]) { + emitter->Emit(*output); +} + +void JitShader::Compile_EMIT(Instruction instr) { + Label have_emitter, end; + mov(rax, qword[STATE + offsetof(UnitState, emitter_ptr)]); + test(rax, rax); + jnz(have_emitter); + + ABI_PushRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); + mov(ABI_PARAM1, reinterpret_cast("Execute EMIT on VS")); + CallFarFunction(*this, LogCritical); + ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); + jmp(end); + + L(have_emitter); + ABI_PushRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); + mov(ABI_PARAM1, rax); + mov(ABI_PARAM2, STATE); + add(ABI_PARAM2, static_cast(offsetof(UnitState, registers.output))); + CallFarFunction(*this, Emit); + ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); + L(end); +} + +void JitShader::Compile_SETE(Instruction instr) { + Label have_emitter, end; + mov(rax, qword[STATE + offsetof(UnitState, emitter_ptr)]); + test(rax, rax); + jnz(have_emitter); + + ABI_PushRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); + mov(ABI_PARAM1, reinterpret_cast("Execute SETEMIT on VS")); + CallFarFunction(*this, LogCritical); + ABI_PopRegistersAndAdjustStack(*this, PersistentCallerSavedRegs(), 0); + jmp(end); + + L(have_emitter); + mov(byte[rax + offsetof(GSEmitter, vertex_id)], instr.setemit.vertex_id); + mov(byte[rax + offsetof(GSEmitter, prim_emit)], instr.setemit.prim_emit); + mov(byte[rax + offsetof(GSEmitter, winding)], instr.setemit.winding); + L(end); +} + void JitShader::Compile_Block(unsigned end) { while (program_counter < end) { Compile_NextInstr(); diff --git a/src/video_core/shader/shader_jit_x64_compiler.h b/src/video_core/shader/shader_jit_x64_compiler.h index 31af0ca484..4aee56b1d5 100644 --- a/src/video_core/shader/shader_jit_x64_compiler.h +++ b/src/video_core/shader/shader_jit_x64_compiler.h @@ -66,6 +66,8 @@ public: void Compile_JMP(Instruction instr); void Compile_CMP(Instruction instr); void Compile_MAD(Instruction instr); + void Compile_EMIT(Instruction instr); + void Compile_SETE(Instruction instr); private: void Compile_Block(unsigned end); From 0f35755572fe63534813528de9a0710193f2e335 Mon Sep 17 00:00:00 2001 From: wwylele Date: Fri, 4 Aug 2017 17:03:17 +0300 Subject: [PATCH 077/195] pica/command_processor: build geometry pipeline and run geometry shader The geometry pipeline manages data transfer between VS, GS and primitive assembler. It has known four modes: - no GS mode: sends VS output directly to the primitive assembler (what citra currently does) - GS mode 0: sends VS output to GS input registers, and sends GS output to primitive assembler - GS mode 1: sends VS output to GS uniform registers, and sends GS output to primitive assembler. It also takes an index from the index buffer at the beginning of each primitive for determine the primitive size. - GS mode 2: similar to mode 1, but doesn't take the index and uses a fixed primitive size. hwtest shows that immediate mode also supports GS (at least for mode 0), so the geometry pipeline gets refactored into its own class for supporting both drawing mode. In the immediate mode, some games don't set the pipeline registers to a valid value until the first attribute input, so a geometry pipeline reset flag is set in `pipeline.vs_default_attributes_setup.index` trigger, and the actual pipeline reconfigure is triggered in the first attribute input. In the normal drawing mode with index buffer, the vertex cache is a little bit modified to support the geometry pipeline. Instead of OutputVertex, it now holds AttributeBuffer, which is the input to the geometry pipeline. The AttributeBuffer->OutputVertex conversion is done inside the pipeline vertex handler. The actual hardware vertex cache is believed to be implemented in a similar way (because this is the only way that makes sense). Both geometry pipeline and GS unit rely on states preservation across drawing call, so they are put into the global state. In the future, the other three vertex shader units should be also placed in the global state, and a scheduler should be implemented on top of the four units. Note that the current gs_unit already allows running VS on it in the future. --- src/video_core/CMakeLists.txt | 2 + src/video_core/command_processor.cpp | 54 +++--- src/video_core/geometry_pipeline.cpp | 274 +++++++++++++++++++++++++++ src/video_core/geometry_pipeline.h | 49 +++++ src/video_core/pica.cpp | 21 +- src/video_core/pica_state.h | 11 ++ 6 files changed, 383 insertions(+), 28 deletions(-) create mode 100644 src/video_core/geometry_pipeline.cpp create mode 100644 src/video_core/geometry_pipeline.h diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index cffa4c9523..82f47d8a90 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt @@ -1,6 +1,7 @@ set(SRCS command_processor.cpp debug_utils/debug_utils.cpp + geometry_pipeline.cpp pica.cpp primitive_assembly.cpp regs.cpp @@ -29,6 +30,7 @@ set(SRCS set(HEADERS command_processor.h debug_utils/debug_utils.h + geometry_pipeline.h gpu_debugger.h pica.h pica_state.h diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp index f98ca33025..fb65a3a0a7 100644 --- a/src/video_core/command_processor.cpp +++ b/src/video_core/command_processor.cpp @@ -161,6 +161,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { case PICA_REG_INDEX(pipeline.vs_default_attributes_setup.index): g_state.immediate.current_attribute = 0; + g_state.immediate.reset_geometry_pipeline = true; default_attr_counter = 0; break; @@ -234,16 +235,14 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { shader_engine->Run(g_state.vs, shader_unit); shader_unit.WriteOutput(regs.vs, output); - // Send to renderer - using Pica::Shader::OutputVertex; - auto AddTriangle = [](const OutputVertex& v0, const OutputVertex& v1, - const OutputVertex& v2) { - VideoCore::g_renderer->Rasterizer()->AddTriangle(v0, v1, v2); - }; - - g_state.primitive_assembler.SubmitVertex( - Shader::OutputVertex::FromAttributeBuffer(regs.rasterizer, output), - AddTriangle); + // Send to geometry pipeline + if (g_state.immediate.reset_geometry_pipeline) { + g_state.geometry_pipeline.Reconfigure(); + g_state.immediate.reset_geometry_pipeline = false; + } + ASSERT(!g_state.geometry_pipeline.NeedIndexInput()); + g_state.geometry_pipeline.Setup(shader_engine); + g_state.geometry_pipeline.SubmitVertex(output); } } } @@ -321,8 +320,8 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { // The size has been tuned for optimal balance between hit-rate and the cost of lookup const size_t VERTEX_CACHE_SIZE = 32; std::array vertex_cache_ids; - std::array vertex_cache; - Shader::OutputVertex output_vertex; + std::array vertex_cache; + Shader::AttributeBuffer vs_output; unsigned int vertex_cache_pos = 0; vertex_cache_ids.fill(-1); @@ -332,6 +331,11 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset); + g_state.geometry_pipeline.Reconfigure(); + g_state.geometry_pipeline.Setup(shader_engine); + if (g_state.geometry_pipeline.NeedIndexInput()) + ASSERT(is_indexed); + for (unsigned int index = 0; index < regs.pipeline.num_vertices; ++index) { // Indexed rendering doesn't use the start offset unsigned int vertex = @@ -345,6 +349,11 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { bool vertex_cache_hit = false; if (is_indexed) { + if (g_state.geometry_pipeline.NeedIndexInput()) { + g_state.geometry_pipeline.SubmitIndex(vertex); + continue; + } + if (g_debug_context && Pica::g_debug_context->recorder) { int size = index_u16 ? 2 : 1; memory_accesses.AddAccess(base_address + index_info.offset + size * index, @@ -353,7 +362,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { for (unsigned int i = 0; i < VERTEX_CACHE_SIZE; ++i) { if (vertex == vertex_cache_ids[i]) { - output_vertex = vertex_cache[i]; + vs_output = vertex_cache[i]; vertex_cache_hit = true; break; } @@ -362,7 +371,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { if (!vertex_cache_hit) { // Initialize data for the current vertex - Shader::AttributeBuffer input, output{}; + Shader::AttributeBuffer input; loader.LoadVertex(base_address, index, vertex, input, memory_accesses); // Send to vertex shader @@ -371,26 +380,17 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { (void*)&input); shader_unit.LoadInput(regs.vs, input); shader_engine->Run(g_state.vs, shader_unit); - shader_unit.WriteOutput(regs.vs, output); - - // Retrieve vertex from register data - output_vertex = Shader::OutputVertex::FromAttributeBuffer(regs.rasterizer, output); + shader_unit.WriteOutput(regs.vs, vs_output); if (is_indexed) { - vertex_cache[vertex_cache_pos] = output_vertex; + vertex_cache[vertex_cache_pos] = vs_output; vertex_cache_ids[vertex_cache_pos] = vertex; vertex_cache_pos = (vertex_cache_pos + 1) % VERTEX_CACHE_SIZE; } } - // Send to renderer - using Pica::Shader::OutputVertex; - auto AddTriangle = [](const OutputVertex& v0, const OutputVertex& v1, - const OutputVertex& v2) { - VideoCore::g_renderer->Rasterizer()->AddTriangle(v0, v1, v2); - }; - - primitive_assembler.SubmitVertex(output_vertex, AddTriangle); + // Send to geometry pipeline + g_state.geometry_pipeline.SubmitVertex(vs_output); } for (auto& range : memory_accesses.ranges) { diff --git a/src/video_core/geometry_pipeline.cpp b/src/video_core/geometry_pipeline.cpp new file mode 100644 index 0000000000..b146e2ecb1 --- /dev/null +++ b/src/video_core/geometry_pipeline.cpp @@ -0,0 +1,274 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "video_core/geometry_pipeline.h" +#include "video_core/pica_state.h" +#include "video_core/regs.h" +#include "video_core/renderer_base.h" +#include "video_core/video_core.h" + +namespace Pica { + +/// An attribute buffering interface for different pipeline modes +class GeometryPipelineBackend { +public: + virtual ~GeometryPipelineBackend() = default; + + /// Checks if there is no incomplete data transfer + virtual bool IsEmpty() const = 0; + + /// Checks if the pipeline needs a direct input from index buffer + virtual bool NeedIndexInput() const = 0; + + /// Submits an index from index buffer + virtual void SubmitIndex(unsigned int val) = 0; + + /** + * Submits vertex attributes + * @param input attributes of a vertex output from vertex shader + * @return if the buffer is full and the geometry shader should be invoked + */ + virtual bool SubmitVertex(const Shader::AttributeBuffer& input) = 0; +}; + +// In the Point mode, vertex attributes are sent to the input registers in the geometry shader unit. +// The size of vertex shader outputs and geometry shader inputs are constants. Geometry shader is +// invoked upon inputs buffer filled up by vertex shader outputs. For example, if we have a geometry +// shader that takes 6 inputs, and the vertex shader outputs 2 attributes, it would take 3 vertices +// for one geometry shader invocation. +// TODO: what happens when the input size is not divisible by the output size? +class GeometryPipeline_Point : public GeometryPipelineBackend { +public: + GeometryPipeline_Point(const Regs& regs, Shader::GSUnitState& unit) : regs(regs), unit(unit) { + ASSERT(regs.pipeline.variable_primitive == 0); + ASSERT(regs.gs.input_to_uniform == 0); + vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1; + size_t gs_input_num = regs.gs.max_input_attribute_index + 1; + ASSERT(gs_input_num % vs_output_num == 0); + buffer_cur = attribute_buffer.attr; + buffer_end = attribute_buffer.attr + gs_input_num; + } + + bool IsEmpty() const override { + return buffer_cur == attribute_buffer.attr; + } + + bool NeedIndexInput() const override { + return false; + } + + void SubmitIndex(unsigned int val) override { + UNREACHABLE(); + } + + bool SubmitVertex(const Shader::AttributeBuffer& input) override { + buffer_cur = std::copy(input.attr, input.attr + vs_output_num, buffer_cur); + if (buffer_cur == buffer_end) { + buffer_cur = attribute_buffer.attr; + unit.LoadInput(regs.gs, attribute_buffer); + return true; + } + return false; + } + +private: + const Regs& regs; + Shader::GSUnitState& unit; + Shader::AttributeBuffer attribute_buffer; + Math::Vec4* buffer_cur; + Math::Vec4* buffer_end; + unsigned int vs_output_num; +}; + +// In VariablePrimitive mode, vertex attributes are buffered into the uniform registers in the +// geometry shader unit. The number of vertex is variable, which is specified by the first index +// value in the batch. This mode is usually used for subdivision. +class GeometryPipeline_VariablePrimitive : public GeometryPipelineBackend { +public: + GeometryPipeline_VariablePrimitive(const Regs& regs, Shader::ShaderSetup& setup) + : regs(regs), setup(setup) { + ASSERT(regs.pipeline.variable_primitive == 1); + ASSERT(regs.gs.input_to_uniform == 1); + vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1; + } + + bool IsEmpty() const override { + return need_index; + } + + bool NeedIndexInput() const override { + return need_index; + } + + void SubmitIndex(unsigned int val) override { + DEBUG_ASSERT(need_index); + + // The number of vertex input is put to the uniform register + float24 vertex_num = float24::FromFloat32(val); + setup.uniforms.f[0] = Math::MakeVec(vertex_num, vertex_num, vertex_num, vertex_num); + + // The second uniform register and so on are used for receiving input vertices + buffer_cur = setup.uniforms.f + 1; + + main_vertex_num = regs.pipeline.variable_vertex_main_num_minus_1 + 1; + total_vertex_num = val; + need_index = false; + } + + bool SubmitVertex(const Shader::AttributeBuffer& input) override { + DEBUG_ASSERT(!need_index); + if (main_vertex_num != 0) { + // For main vertices, receive all attributes + buffer_cur = std::copy(input.attr, input.attr + vs_output_num, buffer_cur); + --main_vertex_num; + } else { + // For other vertices, only receive the first attribute (usually the position) + *(buffer_cur++) = input.attr[0]; + } + --total_vertex_num; + + if (total_vertex_num == 0) { + need_index = true; + return true; + } + + return false; + } + +private: + bool need_index = true; + const Regs& regs; + Shader::ShaderSetup& setup; + unsigned int main_vertex_num; + unsigned int total_vertex_num; + Math::Vec4* buffer_cur; + unsigned int vs_output_num; +}; + +// In FixedPrimitive mode, vertex attributes are buffered into the uniform registers in the geometry +// shader unit. The number of vertex per shader invocation is constant. This is usually used for +// particle system. +class GeometryPipeline_FixedPrimitive : public GeometryPipelineBackend { +public: + GeometryPipeline_FixedPrimitive(const Regs& regs, Shader::ShaderSetup& setup) + : regs(regs), setup(setup) { + ASSERT(regs.pipeline.variable_primitive == 0); + ASSERT(regs.gs.input_to_uniform == 1); + vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1; + ASSERT(vs_output_num == regs.pipeline.gs_config.stride_minus_1 + 1); + size_t vertex_num = regs.pipeline.gs_config.fixed_vertex_num_minus_1 + 1; + buffer_cur = buffer_begin = setup.uniforms.f + regs.pipeline.gs_config.start_index; + buffer_end = buffer_begin + vs_output_num * vertex_num; + } + + bool IsEmpty() const override { + return buffer_cur == buffer_begin; + } + + bool NeedIndexInput() const override { + return false; + } + + void SubmitIndex(unsigned int val) override { + UNREACHABLE(); + } + + bool SubmitVertex(const Shader::AttributeBuffer& input) override { + buffer_cur = std::copy(input.attr, input.attr + vs_output_num, buffer_cur); + if (buffer_cur == buffer_end) { + buffer_cur = buffer_begin; + return true; + } + return false; + } + +private: + const Regs& regs; + Shader::ShaderSetup& setup; + Math::Vec4* buffer_begin; + Math::Vec4* buffer_cur; + Math::Vec4* buffer_end; + unsigned int vs_output_num; +}; + +GeometryPipeline::GeometryPipeline(State& state) : state(state) {} + +GeometryPipeline::~GeometryPipeline() = default; + +void GeometryPipeline::SetVertexHandler(Shader::VertexHandler vertex_handler) { + this->vertex_handler = vertex_handler; +} + +void GeometryPipeline::Setup(Shader::ShaderEngine* shader_engine) { + if (!backend) + return; + + this->shader_engine = shader_engine; + shader_engine->SetupBatch(state.gs, state.regs.gs.main_offset); +} + +void GeometryPipeline::Reconfigure() { + ASSERT(!backend || backend->IsEmpty()); + + if (state.regs.pipeline.use_gs == PipelineRegs::UseGS::No) { + backend = nullptr; + return; + } + + ASSERT(state.regs.pipeline.use_gs == PipelineRegs::UseGS::Yes); + + // The following assumes that when geometry shader is in use, the shader unit 3 is configured as + // a geometry shader unit. + // TODO: what happens if this is not true? + ASSERT(state.regs.pipeline.gs_unit_exclusive_configuration == 1); + ASSERT(state.regs.gs.shader_mode == ShaderRegs::ShaderMode::GS); + + state.gs_unit.ConfigOutput(state.regs.gs); + + ASSERT(state.regs.pipeline.vs_outmap_total_minus_1_a == + state.regs.pipeline.vs_outmap_total_minus_1_b); + + switch (state.regs.pipeline.gs_config.mode) { + case PipelineRegs::GSMode::Point: + backend = std::make_unique(state.regs, state.gs_unit); + break; + case PipelineRegs::GSMode::VariablePrimitive: + backend = std::make_unique(state.regs, state.gs); + break; + case PipelineRegs::GSMode::FixedPrimitive: + backend = std::make_unique(state.regs, state.gs); + break; + default: + UNREACHABLE(); + } +} + +bool GeometryPipeline::NeedIndexInput() const { + if (!backend) + return false; + return backend->NeedIndexInput(); +} + +void GeometryPipeline::SubmitIndex(unsigned int val) { + backend->SubmitIndex(val); +} + +void GeometryPipeline::SubmitVertex(const Shader::AttributeBuffer& input) { + if (!backend) { + // No backend means the geometry shader is disabled, so we send the vertex shader output + // directly to the primitive assembler. + vertex_handler(input); + } else { + if (backend->SubmitVertex(input)) { + shader_engine->Run(state.gs, state.gs_unit); + + // The uniform b15 is set to true after every geometry shader invocation. This is useful + // for the shader to know if this is the first invocation in a batch, if the program set + // b15 to false first. + state.gs.uniforms.b[15] = true; + } + } +} + +} // namespace Pica diff --git a/src/video_core/geometry_pipeline.h b/src/video_core/geometry_pipeline.h new file mode 100644 index 0000000000..91fdd31923 --- /dev/null +++ b/src/video_core/geometry_pipeline.h @@ -0,0 +1,49 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include "video_core/shader/shader.h" + +namespace Pica { + +struct State; + +class GeometryPipelineBackend; + +/// A pipeline receiving from vertex shader and sending to geometry shader and primitive assembler +class GeometryPipeline { +public: + explicit GeometryPipeline(State& state); + ~GeometryPipeline(); + + /// Sets the handler for receiving vertex outputs from vertex shader + void SetVertexHandler(Shader::VertexHandler vertex_handler); + + /** + * Setup the geometry shader unit if it is in use + * @param shader_engine the shader engine for the geometry shader to run + */ + void Setup(Shader::ShaderEngine* shader_engine); + + /// Reconfigures the pipeline according to current register settings + void Reconfigure(); + + /// Checks if the pipeline needs a direct input from index buffer + bool NeedIndexInput() const; + + /// Submits an index from index buffer. Call this only when NeedIndexInput returns true + void SubmitIndex(unsigned int val); + + /// Submits vertex attributes output from vertex shader + void SubmitVertex(const Shader::AttributeBuffer& input); + +private: + Shader::VertexHandler vertex_handler; + Shader::ShaderEngine* shader_engine; + std::unique_ptr backend; + State& state; +}; +} // namespace Pica diff --git a/src/video_core/pica.cpp b/src/video_core/pica.cpp index b95148a6a4..218e06883d 100644 --- a/src/video_core/pica.cpp +++ b/src/video_core/pica.cpp @@ -3,9 +3,11 @@ // Refer to the license.txt file included. #include +#include "video_core/geometry_pipeline.h" #include "video_core/pica.h" #include "video_core/pica_state.h" -#include "video_core/regs_pipeline.h" +#include "video_core/renderer_base.h" +#include "video_core/video_core.h" namespace Pica { @@ -24,6 +26,23 @@ void Zero(T& o) { memset(&o, 0, sizeof(o)); } +State::State() : geometry_pipeline(*this) { + auto SubmitVertex = [this](const Shader::AttributeBuffer& vertex) { + using Pica::Shader::OutputVertex; + auto AddTriangle = [this](const OutputVertex& v0, const OutputVertex& v1, + const OutputVertex& v2) { + VideoCore::g_renderer->Rasterizer()->AddTriangle(v0, v1, v2); + }; + primitive_assembler.SubmitVertex( + Shader::OutputVertex::FromAttributeBuffer(regs.rasterizer, vertex), AddTriangle); + }; + + auto SetWinding = [this]() { primitive_assembler.SetWinding(); }; + + g_state.gs_unit.SetVertexHandler(SubmitVertex, SetWinding); + g_state.geometry_pipeline.SetVertexHandler(SubmitVertex); +} + void State::Reset() { Zero(regs); Zero(vs); diff --git a/src/video_core/pica_state.h b/src/video_core/pica_state.h index 864a2c9e60..c6634a0bc3 100644 --- a/src/video_core/pica_state.h +++ b/src/video_core/pica_state.h @@ -8,6 +8,7 @@ #include "common/bit_field.h" #include "common/common_types.h" #include "common/vector_math.h" +#include "video_core/geometry_pipeline.h" #include "video_core/primitive_assembly.h" #include "video_core/regs.h" #include "video_core/shader/shader.h" @@ -16,6 +17,7 @@ namespace Pica { /// Struct used to describe current Pica state struct State { + State(); void Reset(); /// Pica registers @@ -137,8 +139,17 @@ struct State { Shader::AttributeBuffer input_vertex; // Index of the next attribute to be loaded into `input_vertex`. u32 current_attribute = 0; + // Indicates the immediate mode just started and the geometry pipeline needs to reconfigure + bool reset_geometry_pipeline = true; } immediate; + // the geometry shader needs to be kept in the global state because some shaders relie on + // preserved register value across shader invocation. + // TODO: also bring the three vertex shader units here and implement the shader scheduler. + Shader::GSUnitState gs_unit; + + GeometryPipeline geometry_pipeline; + // This is constructed with a dummy triangle topology PrimitiveAssembler primitive_assembler; }; From 5d0a1e7efddf234234d54fe97395f6975f8d1a28 Mon Sep 17 00:00:00 2001 From: B3n30 Date: Sat, 19 Aug 2017 19:14:33 +0200 Subject: [PATCH 078/195] Added missing parts in libnetwork (#2838) * Network: Set and send the game information over enet Added Callbacks for RoomMember and GetMemberList to Room in preparation for web_services. --- src/core/CMakeLists.txt | 2 +- src/core/core.cpp | 5 ++ src/core/loader/ncch.cpp | 8 +++ src/network/packet.cpp | 38 +++++++++++ src/network/packet.h | 4 ++ src/network/room.cpp | 84 +++++++++++++++++------ src/network/room.h | 19 +++++- src/network/room_member.cpp | 128 +++++++++++++++++++++++++++++++++--- src/network/room_member.h | 59 +++++++++++++++-- 9 files changed, 310 insertions(+), 37 deletions(-) diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 360f407f3d..0a6f97e4b5 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -388,7 +388,7 @@ set(HEADERS create_directory_groups(${SRCS} ${HEADERS}) add_library(core STATIC ${SRCS} ${HEADERS}) -target_link_libraries(core PUBLIC common PRIVATE audio_core video_core) +target_link_libraries(core PUBLIC common PRIVATE audio_core network video_core) target_link_libraries(core PUBLIC Boost::boost PRIVATE cryptopp dynarmic fmt) if (ENABLE_WEB_SERVICE) target_link_libraries(core PUBLIC json-headers web_service) diff --git a/src/core/core.cpp b/src/core/core.cpp index d08f18623f..5332318cff 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -19,6 +19,7 @@ #include "core/loader/loader.h" #include "core/memory_setup.h" #include "core/settings.h" +#include "network/network.h" #include "video_core/video_core.h" namespace Core { @@ -188,6 +189,10 @@ void System::Shutdown() { cpu_core = nullptr; app_loader = nullptr; telemetry_session = nullptr; + if (auto room_member = Network::GetRoomMember().lock()) { + Network::GameInfo game_info{}; + room_member->SendGameInfo(game_info); + } LOG_DEBUG(Core, "Shutdown OK"); } diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index c007069a9e..7aff7f29b3 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -20,6 +20,7 @@ #include "core/loader/ncch.h" #include "core/loader/smdh.h" #include "core/memory.h" +#include "network/network.h" //////////////////////////////////////////////////////////////////////////////////////////////////// // Loader namespace @@ -350,6 +351,13 @@ ResultStatus AppLoader_NCCH::Load() { Core::Telemetry().AddField(Telemetry::FieldType::Session, "ProgramId", program_id); + if (auto room_member = Network::GetRoomMember().lock()) { + Network::GameInfo game_info; + ReadTitle(game_info.name); + game_info.id = ncch_header.program_id; + room_member->SendGameInfo(game_info); + } + is_loaded = true; // Set state to loaded result = LoadExec(); // Load the executable into memory for booting diff --git a/src/network/packet.cpp b/src/network/packet.cpp index 660e92c0dc..cc60f2fbca 100644 --- a/src/network/packet.cpp +++ b/src/network/packet.cpp @@ -13,6 +13,18 @@ namespace Network { +#ifndef htonll +u64 htonll(u64 x) { + return ((1 == htonl(1)) ? (x) : ((uint64_t)htonl((x)&0xFFFFFFFF) << 32) | htonl((x) >> 32)); +} +#endif + +#ifndef ntohll +u64 ntohll(u64 x) { + return ((1 == ntohl(1)) ? (x) : ((uint64_t)ntohl((x)&0xFFFFFFFF) << 32) | ntohl((x) >> 32)); +} +#endif + void Packet::Append(const void* in_data, std::size_t size_in_bytes) { if (in_data && (size_in_bytes > 0)) { std::size_t start = data.size(); @@ -100,6 +112,20 @@ Packet& Packet::operator>>(u32& out_data) { return *this; } +Packet& Packet::operator>>(s64& out_data) { + s64 value; + Read(&value, sizeof(value)); + out_data = ntohll(value); + return *this; +} + +Packet& Packet::operator>>(u64& out_data) { + u64 value; + Read(&value, sizeof(value)); + out_data = ntohll(value); + return *this; +} + Packet& Packet::operator>>(float& out_data) { Read(&out_data, sizeof(out_data)); return *this; @@ -183,6 +209,18 @@ Packet& Packet::operator<<(u32 in_data) { return *this; } +Packet& Packet::operator<<(s64 in_data) { + s64 toWrite = htonll(in_data); + Append(&toWrite, sizeof(toWrite)); + return *this; +} + +Packet& Packet::operator<<(u64 in_data) { + u64 toWrite = htonll(in_data); + Append(&toWrite, sizeof(toWrite)); + return *this; +} + Packet& Packet::operator<<(float in_data) { Append(&in_data, sizeof(in_data)); return *this; diff --git a/src/network/packet.h b/src/network/packet.h index 94b351ab12..5a2e58dc20 100644 --- a/src/network/packet.h +++ b/src/network/packet.h @@ -72,6 +72,8 @@ public: Packet& operator>>(u16& out_data); Packet& operator>>(s32& out_data); Packet& operator>>(u32& out_data); + Packet& operator>>(s64& out_data); + Packet& operator>>(u64& out_data); Packet& operator>>(float& out_data); Packet& operator>>(double& out_data); Packet& operator>>(char* out_data); @@ -89,6 +91,8 @@ public: Packet& operator<<(u16 in_data); Packet& operator<<(s32 in_data); Packet& operator<<(u32 in_data); + Packet& operator<<(s64 in_data); + Packet& operator<<(u64 in_data); Packet& operator<<(float in_data); Packet& operator<<(double in_data); Packet& operator<<(const char* in_data); diff --git a/src/network/room.cpp b/src/network/room.cpp index fbbaf8b93a..261049ab02 100644 --- a/src/network/room.cpp +++ b/src/network/room.cpp @@ -4,9 +4,9 @@ #include #include +#include #include #include -#include #include "enet/enet.h" #include "network/packet.h" #include "network/room.h" @@ -29,12 +29,14 @@ public: struct Member { std::string nickname; ///< The nickname of the member. - std::string game_name; ///< The current game of the member + GameInfo game_info; ///< The current game of the member MacAddress mac_address; ///< The assigned mac address of the member. ENetPeer* peer; ///< The remote peer. }; using MemberList = std::vector; - MemberList members; ///< Information about the members of this room. + MemberList members; ///< Information about the members of this room + mutable std::mutex member_mutex; ///< Mutex for locking the members list + /// This should be a std::shared_mutex as soon as C++17 is supported RoomImpl() : random_gen(std::random_device()()), NintendoOUI{0x00, 0x1F, 0x32, 0x00, 0x00, 0x00} {} @@ -147,7 +149,7 @@ void Room::RoomImpl::ServerLoop() { case IdJoinRequest: HandleJoinRequest(&event); break; - case IdSetGameName: + case IdSetGameInfo: HandleGameNamePacket(&event); break; case IdWifiPacket: @@ -213,7 +215,10 @@ void Room::RoomImpl::HandleJoinRequest(const ENetEvent* event) { member.nickname = nickname; member.peer = event->peer; - members.push_back(std::move(member)); + { + std::lock_guard lock(member_mutex); + members.push_back(std::move(member)); + } // Notify everyone that the room information has changed. BroadcastRoomInformation(); @@ -223,12 +228,14 @@ void Room::RoomImpl::HandleJoinRequest(const ENetEvent* event) { bool Room::RoomImpl::IsValidNickname(const std::string& nickname) const { // A nickname is valid if it is not already taken by anybody else in the room. // TODO(B3N30): Check for empty names, spaces, etc. + std::lock_guard lock(member_mutex); return std::all_of(members.begin(), members.end(), [&nickname](const auto& member) { return member.nickname != nickname; }); } bool Room::RoomImpl::IsValidMacAddress(const MacAddress& address) const { // A MAC address is valid if it is not already taken by anybody else in the room. + std::lock_guard lock(member_mutex); return std::all_of(members.begin(), members.end(), [&address](const auto& member) { return member.mac_address != address; }); } @@ -279,6 +286,7 @@ void Room::RoomImpl::SendCloseMessage() { packet << static_cast(IdCloseRoom); ENetPacket* enet_packet = enet_packet_create(packet.GetData(), packet.GetDataSize(), ENET_PACKET_FLAG_RELIABLE); + std::lock_guard lock(member_mutex); for (auto& member : members) { enet_peer_send(member.peer, 0, enet_packet); } @@ -295,10 +303,14 @@ void Room::RoomImpl::BroadcastRoomInformation() { packet << room_information.member_slots; packet << static_cast(members.size()); - for (const auto& member : members) { - packet << member.nickname; - packet << member.mac_address; - packet << member.game_name; + { + std::lock_guard lock(member_mutex); + for (const auto& member : members) { + packet << member.nickname; + packet << member.mac_address; + packet << member.game_info.name; + packet << member.game_info.id; + } } ENetPacket* enet_packet = @@ -335,11 +347,13 @@ void Room::RoomImpl::HandleWifiPacket(const ENetEvent* event) { ENET_PACKET_FLAG_RELIABLE); if (destination_address == BroadcastMac) { // Send the data to everyone except the sender + std::lock_guard lock(member_mutex); for (const auto& member : members) { if (member.peer != event->peer) enet_peer_send(member.peer, 0, enet_packet); } } else { // Send the data only to the destination client + std::lock_guard lock(member_mutex); auto member = std::find_if(members.begin(), members.end(), [destination_address](const Member& member) -> bool { return member.mac_address == destination_address; @@ -361,6 +375,8 @@ void Room::RoomImpl::HandleChatPacket(const ENetEvent* event) { auto CompareNetworkAddress = [event](const Member member) -> bool { return member.peer == event->peer; }; + + std::lock_guard lock(member_mutex); const auto sending_member = std::find_if(members.begin(), members.end(), CompareNetworkAddress); if (sending_member == members.end()) { return; // Received a chat message from a unknown sender @@ -385,22 +401,32 @@ void Room::RoomImpl::HandleGameNamePacket(const ENetEvent* event) { in_packet.Append(event->packet->data, event->packet->dataLength); in_packet.IgnoreBytes(sizeof(u8)); // Igonore the message type - std::string game_name; - in_packet >> game_name; - auto member = - std::find_if(members.begin(), members.end(), - [event](const Member& member) -> bool { return member.peer == event->peer; }); - if (member != members.end()) { - member->game_name = game_name; - BroadcastRoomInformation(); + GameInfo game_info; + in_packet >> game_info.name; + in_packet >> game_info.id; + + { + std::lock_guard lock(member_mutex); + auto member = + std::find_if(members.begin(), members.end(), [event](const Member& member) -> bool { + return member.peer == event->peer; + }); + if (member != members.end()) { + member->game_info = game_info; + } } + BroadcastRoomInformation(); } void Room::RoomImpl::HandleClientDisconnection(ENetPeer* client) { // Remove the client from the members list. - members.erase(std::remove_if(members.begin(), members.end(), - [client](const Member& member) { return member.peer == client; }), - members.end()); + { + std::lock_guard lock(member_mutex); + members.erase( + std::remove_if(members.begin(), members.end(), + [client](const Member& member) { return member.peer == client; }), + members.end()); + } // Announce the change to all clients. enet_peer_disconnect(client, 0); @@ -437,6 +463,19 @@ const RoomInformation& Room::GetRoomInformation() const { return room_impl->room_information; } +std::vector Room::GetRoomMemberList() const { + std::vector member_list; + std::lock_guard lock(room_impl->member_mutex); + for (const auto& member_impl : room_impl->members) { + Member member; + member.nickname = member_impl.nickname; + member.mac_address = member_impl.mac_address; + member.game_info = member_impl.game_info; + member_list.push_back(member); + } + return member_list; +}; + void Room::Destroy() { room_impl->state = State::Closed; room_impl->room_thread->join(); @@ -447,7 +486,10 @@ void Room::Destroy() { } room_impl->room_information = {}; room_impl->server = nullptr; - room_impl->members.clear(); + { + std::lock_guard lock(room_impl->member_mutex); + room_impl->members.clear(); + } room_impl->room_information.member_slots = 0; room_impl->room_information.name.clear(); } diff --git a/src/network/room.h b/src/network/room.h index 65b0d008a1..8285a4d0cd 100644 --- a/src/network/room.h +++ b/src/network/room.h @@ -7,6 +7,7 @@ #include #include #include +#include #include "common/common_types.h" namespace Network { @@ -21,6 +22,11 @@ struct RoomInformation { u32 member_slots; ///< Maximum number of members in this room }; +struct GameInfo { + std::string name{""}; + u64 id{0}; +}; + using MacAddress = std::array; /// A special MAC address that tells the room we're joining to assign us a MAC address /// automatically. @@ -34,7 +40,7 @@ enum RoomMessageTypes : u8 { IdJoinRequest = 1, IdJoinSuccess, IdRoomInformation, - IdSetGameName, + IdSetGameInfo, IdWifiPacket, IdChatMessage, IdNameCollision, @@ -51,6 +57,12 @@ public: Closed, ///< The room is not opened and can not accept connections. }; + struct Member { + std::string nickname; ///< The nickname of the member. + GameInfo game_info; ///< The current game of the member + MacAddress mac_address; ///< The assigned mac address of the member. + }; + Room(); ~Room(); @@ -64,6 +76,11 @@ public: */ const RoomInformation& GetRoomInformation() const; + /** + * Gets a list of the mbmers connected to the room. + */ + std::vector GetRoomMemberList() const; + /** * Creates the socket for this room. Will bind to default address if * server is empty string. diff --git a/src/network/room_member.cpp b/src/network/room_member.cpp index dac9bacaeb..f229ec6fd4 100644 --- a/src/network/room_member.cpp +++ b/src/network/room_member.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include #include "common/assert.h" #include "enet/enet.h" @@ -25,6 +26,9 @@ public: /// Information about the room we're connected to. RoomInformation room_information; + /// The current game name, id and version + GameInfo current_game_info; + std::atomic state{State::Idle}; ///< Current state of the RoomMember. void SetState(const State new_state); bool IsConnected() const; @@ -37,6 +41,24 @@ public: std::unique_ptr loop_thread; std::mutex send_list_mutex; ///< Mutex that controls access to the `send_list` variable. std::list send_list; ///< A list that stores all packets to send the async + + template + using CallbackSet = std::set>; + std::mutex callback_mutex; ///< The mutex used for handling callbacks + + class Callbacks { + public: + template + CallbackSet& Get(); + + private: + CallbackSet callback_set_wifi_packet; + CallbackSet callback_set_chat_messages; + CallbackSet callback_set_room_information; + CallbackSet callback_set_state; + }; + Callbacks callbacks; ///< All CallbackSets to all events + void MemberLoop(); void StartLoop(); @@ -84,12 +106,20 @@ public: * Disconnects the RoomMember from the Room */ void Disconnect(); + + template + void Invoke(const T& data); + + template + CallbackHandle Bind(std::function callback); }; // RoomMemberImpl void RoomMember::RoomMemberImpl::SetState(const State new_state) { - state = new_state; - // TODO(B3N30): Invoke the callback functions + if (state != new_state) { + state = new_state; + Invoke(state); + } } bool RoomMember::RoomMemberImpl::IsConnected() const { @@ -195,9 +225,10 @@ void RoomMember::RoomMemberImpl::HandleRoomInformationPacket(const ENetEvent* ev for (auto& member : member_information) { packet >> member.nickname; packet >> member.mac_address; - packet >> member.game_name; + packet >> member.game_info.name; + packet >> member.game_info.id; } - // TODO(B3N30): Invoke callbacks + Invoke(room_information); } void RoomMember::RoomMemberImpl::HandleJoinPacket(const ENetEvent* event) { @@ -209,7 +240,7 @@ void RoomMember::RoomMemberImpl::HandleJoinPacket(const ENetEvent* event) { // Parse the MAC Address from the packet packet >> mac_address; - // TODO(B3N30): Invoke callbacks + SetState(State::Joined); } void RoomMember::RoomMemberImpl::HandleWifiPackets(const ENetEvent* event) { @@ -235,7 +266,7 @@ void RoomMember::RoomMemberImpl::HandleWifiPackets(const ENetEvent* event) { packet >> wifi_packet.data; - // TODO(B3N30): Invoke callbacks + Invoke(wifi_packet); } void RoomMember::RoomMemberImpl::HandleChatPacket(const ENetEvent* event) { @@ -248,7 +279,7 @@ void RoomMember::RoomMemberImpl::HandleChatPacket(const ENetEvent* event) { ChatEntry chat_entry{}; packet >> chat_entry.nickname; packet >> chat_entry.message; - // TODO(B3N30): Invoke callbacks + Invoke(chat_entry); } void RoomMember::RoomMemberImpl::Disconnect() { @@ -276,6 +307,46 @@ void RoomMember::RoomMemberImpl::Disconnect() { server = nullptr; } +template <> +RoomMember::RoomMemberImpl::CallbackSet& RoomMember::RoomMemberImpl::Callbacks::Get() { + return callback_set_wifi_packet; +} + +template <> +RoomMember::RoomMemberImpl::CallbackSet& +RoomMember::RoomMemberImpl::Callbacks::Get() { + return callback_set_state; +} + +template <> +RoomMember::RoomMemberImpl::CallbackSet& +RoomMember::RoomMemberImpl::Callbacks::Get() { + return callback_set_room_information; +} + +template <> +RoomMember::RoomMemberImpl::CallbackSet& RoomMember::RoomMemberImpl::Callbacks::Get() { + return callback_set_chat_messages; +} + +template +void RoomMember::RoomMemberImpl::Invoke(const T& data) { + std::lock_guard lock(callback_mutex); + CallbackSet callback_set = callbacks.Get(); + for (auto const& callback : callback_set) + (*callback)(data); +} + +template +RoomMember::CallbackHandle RoomMember::RoomMemberImpl::Bind( + std::function callback) { + std::lock_guard lock(callback_mutex); + CallbackHandle handle; + handle = std::make_shared>(callback); + callbacks.Get().insert(handle); + return handle; +} + // RoomMember RoomMember::RoomMember() : room_member_impl{std::make_unique()} { room_member_impl->client = enet_host_create(nullptr, 1, NumChannels, 0, 0); @@ -339,6 +410,7 @@ void RoomMember::Join(const std::string& nick, const char* server_addr, u16 serv room_member_impl->SetState(State::Joining); room_member_impl->StartLoop(); room_member_impl->SendJoinRequest(nick, preferred_mac); + SendGameInfo(room_member_impl->current_game_info); } else { room_member_impl->SetState(State::CouldNotConnect); } @@ -366,17 +438,53 @@ void RoomMember::SendChatMessage(const std::string& message) { room_member_impl->Send(std::move(packet)); } -void RoomMember::SendGameName(const std::string& game_name) { +void RoomMember::SendGameInfo(const GameInfo& game_info) { + room_member_impl->current_game_info = game_info; + if (!IsConnected()) + return; + Packet packet; - packet << static_cast(IdSetGameName); - packet << game_name; + packet << static_cast(IdSetGameInfo); + packet << game_info.name; + packet << game_info.id; room_member_impl->Send(std::move(packet)); } +RoomMember::CallbackHandle RoomMember::BindOnStateChanged( + std::function callback) { + return room_member_impl->Bind(callback); +} + +RoomMember::CallbackHandle RoomMember::BindOnWifiPacketReceived( + std::function callback) { + return room_member_impl->Bind(callback); +} + +RoomMember::CallbackHandle RoomMember::BindOnRoomInformationChanged( + std::function callback) { + return room_member_impl->Bind(callback); +} + +RoomMember::CallbackHandle RoomMember::BindOnChatMessageRecieved( + std::function callback) { + return room_member_impl->Bind(callback); +} + +template +void RoomMember::Unbind(CallbackHandle handle) { + std::lock_guard lock(room_member_impl->callback_mutex); + room_member_impl->callbacks.Get().erase(handle); +} + void RoomMember::Leave() { room_member_impl->SetState(State::Idle); room_member_impl->loop_thread->join(); room_member_impl->loop_thread.reset(); } +template void RoomMember::Unbind(CallbackHandle); +template void RoomMember::Unbind(CallbackHandle); +template void RoomMember::Unbind(CallbackHandle); +template void RoomMember::Unbind(CallbackHandle); + } // namespace Network diff --git a/src/network/room_member.h b/src/network/room_member.h index bc1af3a7e8..98770a2341 100644 --- a/src/network/room_member.h +++ b/src/network/room_member.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include #include @@ -53,12 +54,23 @@ public: struct MemberInformation { std::string nickname; ///< Nickname of the member. - std::string game_name; ///< Name of the game they're currently playing, or empty if they're + GameInfo game_info; ///< Name of the game they're currently playing, or empty if they're /// not playing anything. MacAddress mac_address; ///< MAC address associated with this member. }; using MemberList = std::vector; + // The handle for the callback functions + template + using CallbackHandle = std::shared_ptr>; + + /** + * Unbinds a callback function from the events. + * @param handle The connection handle to disconnect + */ + template + void Unbind(CallbackHandle handle); + RoomMember(); ~RoomMember(); @@ -113,10 +125,49 @@ public: void SendChatMessage(const std::string& message); /** - * Sends the current game name to the room. - * @param game_name The game name. + * Sends the current game info to the room. + * @param game_info The game information. */ - void SendGameName(const std::string& game_name); + void SendGameInfo(const GameInfo& game_info); + + /** + * Binds a function to an event that will be triggered every time the State of the member + * changed. The function wil be called every time the event is triggered. The callback function + * must not bind or unbind a function. Doing so will cause a deadlock + * @param callback The function to call + * @return A handle used for removing the function from the registered list + */ + CallbackHandle BindOnStateChanged(std::function callback); + + /** + * Binds a function to an event that will be triggered every time a WifiPacket is received. + * The function wil be called everytime the event is triggered. + * The callback function must not bind or unbind a function. Doing so will cause a deadlock + * @param callback The function to call + * @return A handle used for removing the function from the registered list + */ + CallbackHandle BindOnWifiPacketReceived( + std::function callback); + + /** + * Binds a function to an event that will be triggered every time the RoomInformation changes. + * The function wil be called every time the event is triggered. + * The callback function must not bind or unbind a function. Doing so will cause a deadlock + * @param callback The function to call + * @return A handle used for removing the function from the registered list + */ + CallbackHandle BindOnRoomInformationChanged( + std::function callback); + + /** + * Binds a function to an event that will be triggered every time a ChatMessage is received. + * The function wil be called every time the event is triggered. + * The callback function must not bind or unbind a function. Doing so will cause a deadlock + * @param callback The function to call + * @return A handle used for removing the function from the registered list + */ + CallbackHandle BindOnChatMessageRecieved( + std::function callback); /** * Leaves the current room. From d51f4d21bb3684a4bee0850944a90aa2d48b9ad3 Mon Sep 17 00:00:00 2001 From: Schplee Date: Sat, 19 Aug 2017 18:33:44 -0700 Subject: [PATCH 079/195] Updated master logo to new logo svg --- dist/citra.icns | Bin 1027012 -> 211056 bytes dist/citra.ico | Bin 509287 -> 370070 bytes dist/citra.svg | 80 +--------------------------------------------- dist/doc-icon.png | Bin 8791 -> 7768 bytes 4 files changed, 1 insertion(+), 79 deletions(-) diff --git a/dist/citra.icns b/dist/citra.icns index 9d3dcca83b64e977e226a2ab2427e266d5c364e6..ef7bf4e6e370ce13159f2fcd1ccb10afcc854859 100644 GIT binary patch literal 211056 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 literal 1027012 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

qP31o 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

qu+xa=R{juabx4@2YDuZ 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

2oJ2}x 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

jB7XG94Np~Gl@jI;T7=p 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

Iw3(8@FAOjUR)|pUau?=sMOxWv>OP z|Nh2Fzb4Mze@on`PHXJs?{*di)SgM06*u{+jRs#m*H`p$4<_7Ls=j~CxYShrlitD7 zc7f`{i3#(M>z~SjideX0_a0NOIA+nL#Wq_GWeogWW?=yD z%1<(K`i z;P%~}mSrOs=%5klD8Gn|bIGoy_O1ec>^SdEEWK~$7{nn&jrxvx1|))M^JUrdkDNW( zv>9ei!)kDjeFd?+AF{u)akVO8DwrerpY*E;(N3$y9@5%@vR@bQ@ad$DBk+w7pMZc% z)U-8cW+Jvx)<}IZH}bGXwk@>ht|aiuHaE3M+DH>KZtK^C;+UrAn@+h~g5CpbAI02W zmdbG_MT=(_bEN|-$rIM)BaGmz@UUw=I+*s!UIT5_O-(yq>*v7<&$cBgD}3fWsR{9J z7BWH>ds(pQV?5={6;*GReO?^jeD%99;9#$WSiLp%qZsQ_S}W*V(oG=of}h^jJ2Sb2 zqy~N6)Z$7!4_l~N2wD!WKwF8zDz;G98n&B*H8&S0TUOV(MmI`I0+&zf)|jSB)zm!C zoWQ;}LItyh2_1s2%td#;dy~5R)3RayQ(?y$!K;9Z0rNegXI+o=LL|7;z_K=+m0)%L zxYRjWdGG7-e!bw6uCHEsuSGis_xA_rQiM#&I#&k@qKAcll=Iq_DFDJ+gyciYzAdn~ z>wk56q{1n#GOupX{$y}!lCr6OkV2ygqd+!2o^y@$hG`(5yzczqb>*1|RqTwIdOP$m zmZ4e#s-z}8TOK0ghAVO>o4M=zlk>~_10Ni|{H0C&xc=DMXQO9c_N5%8nWCSU)D>_Sl%KHY<{K@`K` zq%}gZJ199hGq=>Iq%{SO{5b7lf6!0BecivT|GFydweR6?PgmI+^D zgYK0JAwsgnUP*SE$=Gob8Y@Pnk#MQgvFUKXFZO9~{JdhY(kwzdAp58n1<|^~KQ4wU z{-mWmWd^tMd%?L3A5nYmJ`}uMe7-Vmrnj5xg@3j5Sxp(E@-&HCyG%R?6~y!;vS?Yl z+Lc|jF2b$#nl2nW^xSL~(Qw!G&=+7zTe!i%=q6#6krf+kZ=yfIVNfOAueuZbIyG_W z-`T6-MYG|UaatX|CELQC+bSngI6RS^Yq7hXsi@k2>cz}a)Ka?Vdj=1-3qCBB-X3r+ z3HaeezI7PlkJKY*pZR1vF-R)1D!Nv^YmPctN`H0kvpzmxM2x_BeCz>DiG6=17X^WN zt2tcxA2-ilD*9J8&xY-PJkC7(Pz_{qVh8ZH2w0FI$XvhE7PLxbtK?wPFkeLgCSx8Q zus7i46e$pt&Jc^NvZxy!U;Clnx)#3U%cJdKjefiun+FznAMDi6My!@Pdlhn4q&>gkMA^kh2-%j z6hL(P=0O)KG3bu2iC+QFt8TmCp4m_;5tdtI$3-z>qB(!VvGK$ z3}i}!i0|8y^d0J4ewoyO+GI(zsd@-T(`=8m4PyDz&84%8$I~Ptx&3(WQ|R%n>0M125i+B+U1@qq6I;UrP?lQG zMH3`q+aXwC!5vWg=a@fDpwAKYc+}Pkuw4=-_H+cM=+fJ zVx&uBrD%>?8XSHR`iP}ixtP|5@KZfsh?tS4*?cl?KmWZlp0!0WcD;(-zccbL>vKvM)`P&CNu;))R$VD7y5<-!}}UwPqCjHVpo~$F~Wy= z)N^4F)`^?yEMA(EH4Z-cr247Gwxd@y$$H!Q4WRuzry9kKzyhg2Czfk^)|-gBSKNW` z&IsnK+r|H0QGEI;7X$g^u~p)}2mc@k*2ZK2z(67TE;BZ*Q|^|pzNQl&w6B2_^=x6e5^k3#uPNXD-Z_#6cBV3Ry3lNo3Tk$@Fw-M^^2q<_wLE|Q`n2sJuqTOhfRqs@<8FbT*d~n3>|VEM6KdB>BG!F4Mq?^W}W%({EZ_G7xAB_PQu- zL*7@`v>i-O3)t$Oh-MQD3gQqAVmnVAIaVbBAmOPei!^5j`D0PEE_2pzjgvZBrd=bU8t6N2{TwL)YWaY<4Jb-^g`r7z4m+?8dAs3Z z6tZ?eedf%h1Kuiy6?5HWh+Dcex=#2z)j4xX-J_W&n#e=;TbU-v2Gz3BgmgA}Uyh1j z5A0T3FtB01*T4xX-yiHD+-3U+FD{E{6p0zwN)2jQxqxbxR_@YkYdUT83}PaE^q;H$ z#;OJF@QX)7EI7mk$%PzLSS^c$)(o3HHlf<61xFL4ZTUpo;9m;|I1N6nwHz<3n2&XG z=N;0|+&oO%;dRwIn%zNFW9?F67i*Z=C0w0zR}|}-w#^6!8LRmeGnc6PjVcvOB{3VZ zz~oK;?I$c0tj!{UV!@e^2tcxC)>_1Q*arEtt0a-&x)ZlzSWi^OQYTg(hQ{-3V1)>x z6k1EKjzQI56^Z(S?0z~M{J;Vw zsQtWXBU0<6NpTvbAi-hvZlPb%j;tv#+r*avKec}c^-=i|4>$Uy`*#F5Z2$YS9b@|y zOsC#_3-HW3W{9&8sp=^(8!rK=Y7ze9ecG!R^gjGP>RSlVyvzjQ z1dQVOZ=SJI>bML1ka5TTKpy&+GY?7P_VPkdA5YTHubH)Vj{1443MB5Ay2AT`m$i|U zso9Ie;i5wKyZDv4iasNo{BfTT=Za%Vr0ByY%)J}a(f9w9`2W?<`HmVc`ADT*|Lt4p z|8%xj{mAUKce0cdWET{|1b_XWHK?~3t7$3$v^td$?o8W=3P?Q<`&VDN3mLsK+4AWu z8*64DJC+SNbzHlgyHR@6&H3+&Dek^PH?PRPWY7nBrOl~9UPPncN_#W|QwLqjIveFX zsq7A;pa>h#7fR?uKuXX+CccRJECiKMLSKMW%Rb#~@LD!_p^pqaVu>Z)8jCKpj^(8r zoK*-weT`jJYg1;U8Kc)lIbKW9khgF^(fD#IlEZFrBC2+wkL(u2Nnnq@3JfKSC@lj3 zcod#KR@S2`JCjOy+eIe5(Vkx zt7Bx_a!c#UDmZMxub3^mf!d_)B}Fb}jRtBGaAEbXD|wN_+`60D#(+C|m=2AZX7aP6EtNY< zqvv&=!6O4a>X@^cz=Pk+g2c46PY2%hn+RU0Kefg-03uEpbQ1XsXa@tGI3@%sj_tvZ zMG*3L3}X%YCR1fScE`2G%>tJUcj9;xS5wR1iB{Q$0?0u$;hN22z&>1#?jVgqexZlD zxq=M8N~jGR_9Q1i67UH5Qv%?Gsjmj+piF-WPPjNefb@{fdNZVf2mryON9Gsn_pW0) zFr*JD)*DBtsB6a-p{Rf={bTiR830S#~%IK~5~taQeqc zmBq8B&U|pf%5&Ao%y}^rP!=zWT6bGMYl_U zJy=DV`zL93Iro0$EABx6%@~EYF`~BcyU7;b(|XmIUvQw&6YRn)CqBPL*y%Z>c#`)io-%WHu%u=TIv@bqF*y{VLAGqo9pDVq zbho?`5#`cuo8+~R(0EHt#UW-!ik{?qDgNx2jNR?!Ku5b1KhsYf;2HHGv(p^=Ol#u9 zYW3wmYuLw4yX@#JU{7G=#64bSK8TvjpdBRjte0f?PkM)F>doC#3}xLrx_g&*gYM&P z0nSN_(aQdT{l`8b$eW18eVG|?7g6D zyKw!=mf=lwSF9{Mzv^miGs(gLt>r1dEx}#WM$3@xBu7X*xbWi543@R|SxX2Tz!2o) zt(})M*Hs7Om74TENsEiz+h7I$q>E%svIa&n?rLh{UKF(b3t)1KV1;AMKo)m3fEX!2 zxix@_WVs-S4QMEkNJmOm%@c|N^ZkUr3z|;%-}2pAF3tGf;AT;GsGvwL5MalTISr*1 z@Mh4QD^wK+7>7&}p6Y*={URXlD)=}S7#3;$G_Sx7ww5^w5~3ZPe>f5Lpvv4Bk%OXc z1(Jf2K9>oWweZ@xvRsFXrLt7fehq<*Y~PXD9+IRG&-c$%^Q|l^b;TOLeqw4^+F^go z92=WKGlzh3#b{=>_)xS>Ll`OEW+jnZU@ru$#K6E;T+h)zx>?zv&Pt{smL}15iuU|yI_t z>Nx7|rwCi~>szN(@4zY!2RuW-w&nNNd^QFK#B%ZaY_!Q+1idq&TF!u)B_JSVz1{B8 zKMv6$cz9CxR>$Sckth_z1Yv4v|0-oK`6b1}xI+Ofica9JeGf2@3LMV+oF4EPg?mZT z)5ug?7P)5C)LX+PLc61xC3qS?f`Hl2rq7$w?WF>jQ1}(bOGGy+oGF`!VsPi zuS#W%jk3+2m}O@^<~4nitV5@nBZEvLf7>b~7FNzpVj~<2X9Rni(yl#Vgz{hfOnC9@ z$F#?KSy1Xqn(yeuKY) zR^C@|ygpW^f#nY16fLT-bQ;8w@Q)i1Q+T}`n?(#%J83(4MN~HbZBPxq9+JDsobAtl zH(_vPucRM#{?UXci&BlDlGvYiM^%}Rby1T`bM6Z_01He#iFyrmVt}4;a4+qRQp~f& zs-yPx6OS-FiTQagp&7Ud!dKbz)961NHSr^6vR*hjdBwa{!APTfb7a%AE+~JZOq{~* zv5YsxWXLZ+H{r^T{K03vum5c(X7dahAbsxwSPDyc0!e!_IkFU9#9Q{hKq4!XW9U+) zBl1EmwQF52EKc8Gx0c{ka88zeQL^SR&-&PA7uBl0(1qbz7wHE+ZzdI%XlP7tq!5bzOgI~Y{+vNT09oK5L)%x&wJ!CI$T7%^S2@1<^lvmhoi zm)7Kk13A$YQ%H3Qw5KTGEO=r0D_bfuRYU@OSzH${Cy}jv(f2S;B>Ny;7hC?_SIe%p zQ@cKMCK5PT$giXp3Ak`_URq6iu^hw*?C+ zUDw~)>nd1{<^(G7E{c|wm-B>#^YQVexEqFJh_9`GWraUbw0qonKXHMGOTARXeEG_a z;2|-hcppEJj$SJ8TQu&pFU?Gec$Mwk*Y+w~%}LVr%q16rsRe~Z0*t61(DZVKXuGno zg|bG!=)ye~dp;(s|rkO9ZLnuo#t2eVF z;CO2Mb;8xA+{5$oY8RKP>6L)3-5qMkPEVHN{_aD`1}CeP;W2_@EUcPgNR(CXg0C~J z!9KqhS2P=rn23c#1v?yTkQLR2Wmj84Q)^L2DknHAu{s$?MeF&zSbW8?q zxi6Ky!13w!;h5rs(pk&x&g{H9d3_s|ypjIS)S8^P&#m?~%a(BWu+}gEG(DL}{hY(I ztBK+r!Iv8dLA2GZvFRK9SxIq?OOXFSV~}l+DRS;0&2=Hyt5L*jTQc{|VvIl^#&2Q* zpy;7*>nx`L9k9anDD|$WkI0`Vi(Ve2`Bqd^&?)#%>wue^jHL>@SVNRct>`w_kHwWh zf!=rG01^NTUcik_q8Z6+!E8woYWEI6`x)YYYCdqK8e%Wke{ehvG?r?o3IIjN%uTOQFSULn_Kn_OSaI(y2jfDJY;OL6sYpd-NF+5oGPKAtFLF4wYw^=|*eT@UOoB`cpOSsd2*a8y+_>^w3t-k8P-1s@0$ z;psD(mD#>{1@+;(vyH~aF8rO4)Zj0Z<7<{Gn32SV+<3Tf`T=zt|5Cm_+!3YF*a1&F z=-eAAQ0S%DK4OP!CacLHE9mFN8J{qPJ7I)q*JVJA;L388P&Sklqrpp5b4aMPAZ!S) z5rZewOSUbpgP{pIq!>FbVE8GBymO>|gJdj(_^VaAA@FQXhtzpF7TWYGvlJ+Y3I7*3 zc>Z5C!Wi@DbITzh6>bW7xGa&~8A4!b^>sA)z%|r_E5hw3sDuhVaHXjIZD#zSBc24a zI|t0KLma%M47VFAIUrf>HIf~l{ml(YI?WsoHRnQW#0Y9~Zu&=#d37IepgXJl>8T1< zAz+f{2X1>SRN1r1sZBe@#gz@;gvX|hVRK&2LBB#$(Z)OBTNka%L(Pwt@IBa1tg(gZ#i zlw)70a`bxA+Z8Z906Lix`PM`UY7Xdhj}Nd?zDtwL#R5u&5Al^r=QM_TYCcn{d*oPA zGmHx2IUBxw6uc%Y`=G)N(sbN9Sk9&86^NS;Yvfo8!~zhj*sQOe5o8!+jpxk%^@k}~ zUoWUYi?_Z5_2w11@oaL<*mga&!|dNteIM(_d(pn(Z*mamAjf*@;{-B*7#N6 ztr9gbkW(EKiUTWsh* zZBoriYJ3QD2nCq}?E0|-Zof_3t3pZI`9*q^$o`+emF=PLf1*_xR^K0NCgyM=f{&!l zmuv5exl>WyawQMo%GG36i#CQn;@99bx9CJkwTM~@mG{Ppd&3%H?ETbu?k3)53Mwec zpUf2Z7#oIa^)tj5>9#F##IKkbxKpgd&4asT|LGT;?nEw?mhSjMlB?y<9trz6&k^N_ zZ{Kk?eg8=>AG-hoH(YZxLo?11s)b`>I2gMS9Th#hc zq%2(1T_?fsK_Ui494-ijbnIVz5R zZ)8#9pvMu1%Zx>w#gy?ct36iZO^^dwbp+ zF|x3c=9X<{-Jv4HJpY{XI;_<$;EOt7`W6;gD}3jGXYTK5(oU&Ub))*T&%1w%C4F>Q z(Cih2q;VA*v>4KStoHtH?$5_-TZ+u0-Z)AReg)RR+I&QIYE$NUPo`#OENtLIXH^gt zMf$U4LyP+Mc8?u<9Ih$uf6kwp98UTd#J{o2D-&oo8HSZ&p$#S0e1g_umO@bo`awY`#>m02@0eGaTY9xj5Pn~*<1F0Q|$i|{~x67 zU~T=|0>#tcaqk@Z6Z#T>6MiGetpeP7Km$O=Qv4e4oKOd;G$rzvpvY_~MVm2*7E7Wqtb{{R(kVkm;Y}a$>>!~qQc$#EW$5}uA|Hvk3piYF zYz6F|bfgB^Wozh?=I>m*4O(+@k{;ds6MtrB-q+|8)L3zB*Xe>wDXnq}kb1T8q%pq9 zRqA<1Vd}5mQ@4snSH-N&tMzo7)%M{P*U|_~K_(5d?R`sB@7%MJonarO@saKp?qdV7 zfZ82S*jMd4R*!{|$WC(2QN$|gVO@&UAD&A?RU~9}KqKtn z9?1M!6o_yDRoYY8i7u3mUaLSS#sK;H){I z#ZDgo;#GX_Xq+m8zC*RW-%?%#6PYfLefdu{;nz2PFg?{56tF<%*ru@G0iAArtMN(l>+XBsMYoh(e}BJ07oHv(7{y4PW;K^70;a^!i%J@jGZTs<#g zmPF+=gtZYzu@v=guA>*u2s(D08+Ev31Q4%QU!QdhIJM)$+*q!HdU-`I9x1K@VUo$R zpgR-@LDWk@fHLlDF^;AZDCG{(Rz(;Ci#fBIL&%MRVkg>y&~dOvqs{e#k{p(+z2~*v zx>(S-Buc|h=RS_P&KSn@?WDSfWidC$q|pS{z! zh2lrfay>p{4f-54Y+YY#oCK%TVuPmHOL7z6e|Tpzuh_{me1^iQt2S}fCj3gIRM%8A z8(aG|-fNa+n~}Nm8AYgEToVm8`481>Kd9vxDS#G13#adFp~(#BLUWxYK*&)F1zlK1 zseOX_P7)W8o(w}QtF#G>#<-EH1OSad*$4y=!hx)7`vDYSu<6%(v>=-5-M;S?v~AM9 z9o>1co-YY53d1Duu$0X?#;~83m|qyGu!#TYwC&wEr*yFYxr)`&i#_;9>A=?7vOSU_ zDsNPkx1}$sUlA)eLd`V6qBmGZTB<}Q7GAV}!bn#uCERnw#Yrps`Aohnb{3|U!;>nvQASonRjxO?Lo?b^0kyye(M z+P@DW>elmT9Era=H~np{+K1Oph@)9x`o>YZ&Ba8(CmY>Zf+sFhB79ZoZTsx z-d9Wwbr+z(dS*Tnb4)*f)ICkIdU*KrS9NuVQ246E5gq2B(~|nD9hpBE@Q}i;gKH|r z72{0-6D1g?uEkB1Qvg8NQgp#RVs!~lv62*#YoHW%nffXET_I+Pmkp#sFf0_4H;>Iq zskVW%Z%`0A8f@^u`n(cqv4q3bH;VN@yLw6^a>?SVapgz#urkX`{J5b@ zz~>*dRcOC#qk z#RJ9Gpu+vrq>mKxdlc9Fc5htvOg>IkhumlT?;zK0c;hD6R4Io+>o1uYt=t_4s<4m6$YDf<^PXkdhFj;|WN3BUU03$H278k}`-LC>|ZsLZ^o zdWY+Ii<>lP>8Y)+i+P7L1>=oZ*0Bs9Xv)myLlsHEv#QqIYUg^O{#z3#u3qZ^cTR3i z02*{@$Rv{l=HLVPmF%ryX7#Bgyk~x2QJIJ4A%kJmeuF>UakAo5S9bmjRu!X`(fNgU z(@oPg^Vj|(lgMy&Z_3c>mpE~)&anR64-cBYc5{~#gr_Lk3pFt1vbB;6P_bK6OzlW) zWsTLkFp)f04mXwNnV;RF6@aIn9^IAGs-H>;9)AQ+3+pU7!`)V{kscr3IWu-z3=qEw z2oj$$*{OoeJJ;#_yIze#AlbJ}9G1~1Cjx(t<_UApEW8>R0dnGRUofD*xc*yiTZNkHYC`o)~yrmY!rU}ujRyXR&a zZ_gCM%n5ArEYt^^8G}JWe(w;?8nxywA=cKIUw)jN$Gogiyu%F6kk$2;t1z&u9Walz zQUa``aZytw-~CmBMJ$vj;6^A*jp>8e6l-PPSGuI%_(C0?dE z2EcI_+sd9|R+iitYkT^&%wOqshvcT9;zfh-AB}$~@Xwa@X9H(EpCIVxT~c@jNM6g- znvW~r0`QDS=2PO$@A!TI=wc>Ef#_s_EaXGT`heU;WE3CF`+#>o@jmxdq%dLK^79DE zKJ{RPVIoGDP~i>@eW@54tDR!jKL3zh9(Mp%*x4(-;CRnc{G?NfuZ?H_U|zED;xj2B*71O22~fPuCjt( zvKqc3mr~HrcJbg6^}OSX@Oof%vDb}RQML^jY-rQ~i-oM8b;?fYLZ%qV4*E)qS>G-y z)-`0#zZ3PJrvA~h|E+k)rZJ#uE@L%;WF%g43t|UqD0ze$vjD$fOi@XFY**R0A>92<{SWkpKxU!9s9%g4^!mBzSNO9wY=OSb)WYLxA8Gf(F;c&pz+_ z{ojAiT-WZ*^z?Lf^>p{tR9D>vSn5Ao9Shf}b&R;HkN;EiRc1&Xo6BcV7)R#dS)3&z z7r7j?=a}jJA%hAj410C=S?TVR()}FvYBRUrP`}+aY4ut>J)XqsepucO#@7~piY*T;6VTo?%Cz6=x}jJJ{t>J8eEiqb_lc@8ATl*)DM z-Lym**_VMII zu=G`pHuC&W^-5;U=X)oH(%FFT`575{{64x9{}uMe#~BeW~(cb7k508p!LAoIc)5Y6!0*V#%nx-GgFu$Qf9&lc9jH= z-M#l+Un^_8RA*itlSP~uFuBPg}^cPAUt%t4|_Zf1ict$2fd`(&+O*wa)q^RVjGxe*7taw@8|+o1~=KZ*a5=$elK38^ zb+;0kVXeMXK;}MXmw2qcr&`)i!15gZNV!3YW>TOO@NY8B=VmWDA3=ZdOr|+=i3yeB zHPcizV4v9sog_kv2&cCvt<#;_eJ(BUIIse7)_)cf`W=ZUV9YKI_`C|<+{74PXztwV zlDrWLV1=wLpa5^hi{ZKcpC*O=Ew%^rNSwU}H`mde%O*;Orrx$r^mx$4JW$Gmi!X|% zd|}ok@nr-D!fvTQermTW$6}bxj`Ap@0)AUELwnItQtjvYYdf0E8tE`vXYi@23*iev zZT!#k3XlzU4@p!)kxK2AAgLuji?IXzzft*?R_*oAsw1WMR@!%Ph;(;n#Am4{Xm6jd zbPE=g5-H|Bw4|C(d+zdDXuT`n5$_(@Gp7pcKvc3SdTU6?e>95 zjHj5gAg8|_`Q0RsLO3ACSgpZJ9}pWq6mjll$I66OG%oFT&-D>L)p3Em4@A=DjZUjd zHeu>AF{|>5Y5g+xjk$o#t#F!*plMa&T?O5R7+i9j=Q`|vY4d{bhSvO+rsl|lKO!+m zsAL>B-w8uMmp(~gJQ4y2iN8`_CJzx4CB=M(KU>NUwO0qiKIOBN*`=1WfoHSJ)M?bH z=~ynRKfD0(S!2e>J_Xz&ZO^5Es+=?8i7P6l(^)%rb<2MZ=;lR{llcBl>#l0b->qXl zB4nw)eZu@!R7=)P6}6AyOB$Z2{S3-#k7zNB-}{UFF6=NZs{w#ND*zzE0N}qYh;0Dy;sbzPGXQvz z4gi#H*)3X<=nIeBlnp%qfa2MIKhP`fr$+z)GPKt<@H9|UePQY9%wullYGKXe>+FWk z4FHn9FVKh1)}H2!zRpfA9xr^QnExlo3-s}S$-K;r|C7bjQHt3>O_NdH^}RKtFpm%q zAG0(rBO{~adn=n4+6s#Q=XUg&6tkVDr`ro&ULPMH9v?v-*Y~!({Nm!`ynF(@0s`FV z9NZp$E}rJT+%6t0|69oauN(zy56k!VZl3n8E{y+`Yi{A{sIsZRt|A&qw?|;Pq zUzPb^PX8wr&8jr6B=7%iHfdbdE;d5|fCB%S%=m)#+HA8H3{qKrUv-URcT0p9C8$|* zCc#@@W$?xi%mSFPc+$)u{$*z#>7HyN&Qy06$1mnV-!NI(4a@M-;G?{$Cd z|01W-eQbZpXT>^e_fR@@=H1Mc-~SSn&jx8Qgvl4NQE{XP_j_SawSKwyp&{V$d8h;J zDe=0`geR^0V`5Tpk~^njWxCkquGogfUOB;{UYw4{yLAMtv6=-R$gukBvc_0gX;;BX(OMrpfm9%DFMa`;SYEOwd)L7~>*n-V8hL4}Pi7 z$ABv(f_4M0i1*FL=|&P6;?zH~nl(NRwBA1r)hK?-gVjIKQ&SJHD;~y7j32z)$K3j| zZI7HCX?u91x)_`gV=DXA(INhVq7%S374Q%}C9)Ry&Ib)fUM+ZqVPGkNg1f+2VG7Jz z(Tas$X;`w4@SYZi)4$aJpC$l32#%w~P=_>U5S!JXV+gCGQ7(38=^rgEGzAo6-b1xr zR)c1!_hXh0duZ^3@bYtigQuh}eLQQkGv=GGAql8)uCb+=;RDrW0wqs*=Qb*-#FWh8 zCUX$9&T9NM@oIBdr__BBg0X7rJ#&Z$F^9RGmYdlwF~mXgx7WL_Nq@JyYp*|>&GYM; z^h5l9q)wgqn1ZW8*ngF}BzyttVPs-9==`%ALrdV*dpk=@7S&i2e*Zm|?2Jcz{thSP zcDr77M=pK58PZhkb!kmg?qt5?Iyj!tJyF|Wb$hfOP_S%h3HW)oG+cIxm@R64P0QqtX42@8Sh}gt@~(fGKS%c z;$iyHGnSH9pJ}AhVNEpgra69@DvOq+ObCgio`u7qJyqn1`^m=SSS+MTlXVV`#Z^tDPtK-2=O?zRpm-MJji!SmM6b_tEgr0XPvew0sBO zUHa{kVvOFc`>i(_Zx&6zj)Nk-z25DUNN8GD$SN4(va>_k^YDU0f?3EkqZrj()_R(A z%qWME6IsEs455XhES+==;nbRAQkPaeXA3GG?G~u1zeysKu67q66D_NRf}R6nG;LO> zAJ~Beoros7FT*uf5*Jgb;&8-Fj>jBPKf(Os-QqsskDh)@TRi(72Kx(rNl~F$HonuRAnQLjY;m0sj?Q=jR|+^huR6% zH%K+Xas(g>ZNTj<{u33z{F&rfN-?8KKJpo{*fC~L$^D{`NO6TqL4!bKDAe1=D&T}P)#wzLZU;Yq$<|eonK8M*uCay z96jutlT{5CyK!v+U>dcaG13nGcstFZ)+#6}VR-v{yr&bo#ErM)hOs9n1d zbdW~BBr9Yq)a%C|#^|;Mw^|)ojeks(2-O)=1omt(f!K*lpHhCRonM z*F9P?&WSBfom6yS&1d_hB}FgXr6@<#uU(@o;NtL#@4m=B?D2%#(@ID4pJ3)M_RKUC zBrIg42{>|8lpzW^2VUY>w=?uIVN&x~xj$_1o;1Ba>5Tq&!tsz2WB5Jqjfthkp!g~Z z_%^N3U|bee@P-`gtM(9O=Yz_I5n%{a#I)Q>Fx)}Jb{e<${kLpxqpNS(DXp#gqsA*- zRw5pHkGeodZ+73{(pGbrN&obvh#Z-d` zU@z>cCi$0QXfsLT9j;I6KO5!5jBpp#XOtz2(9OgSgym~cO=u26qMr&~Dm>+~(A@Ci zdu|`gNQ-ldCC}#XG&}dOP(t*_)XnCtF>+NKmX`)M@u1p>I@r2$) zjgb&PJ>B46$o3YekE6|$K`?_GoXnhw`p>GpU7m}$!$d@+WUPzQK5Y(nB{vI^PgCTz zY4qcBe^ctJaWkOe>vc>desY?hKtVCS%y216T2aSp9r|L45MQjC<4v+kX_t}N8}HNN zdBR1!%frKz-@j{%zn$ltEN@-nEtpnNUf@wIk``!N5-Wum zPvOak?O;LVR;us`OGRw%*jDkETsbT0psN%Gxy&o_Nw!ng$&yr}k}8XnkDa2U!8+fY zFRYHpfEQFU_5RN0%oI5v?I+5T%_~Q#Cbua6^l$21|5D}np1{{7s3j$dm2`*s6I{b8Y#7Lc8k(TasNu$bfRr-lnA!`_og|1dcCVw{)^?W*O7NF91Z zEs-GG2MQ1Nl{DFy$0;?~{!S>F>_JORJ`8Q7hF~IG>PYLQVgwm8q#;R}(izeiDCFPn zN0}F$i*%;2?p(B_uv*-=GIdgXp&`jb(2;Y@8NqvbG%a5jufSShzCQPOV26z|>9n6U zHhg1X`@@c|mAEy{=@rG!!X}Nbi0f#888E*;t#> z(AwIY<>MWFDbt*03V*Qi4(Kr8)W`Z9Q@-EL=7B>!h&$fy^A?gR2U^E5BgykZ1pGn& z^>cVLZZ#25DJz>ZR^!L)^b?Lhna9TjBlFd~_{NF<f%dBR8}CWJ{1C z7oQ&P!fh(x=WzIOp!G7Zd*o<|rhVjSf;UHKxVWDBZT3{s*te(pqa(c3oUSvtk zNnCnI&o#8YHs^dBv0!S1L8AxYb5Xa~xk9kRSh`(Tx?gB|S>P0Xh2o;a$dxvMjIgN` zex`#;1en}^(R6nFHwyE!f}w!#HVh4EHw>T=W!HZW4!%~nI$KZq`1{Kar?ZR&5{v+( z2abyS4$}`(h@pX!E(;PgFsTqE@BW9Y*`D6@fvagx&wG?pptb#=SWet-|7v5d!f5t~ zJV}LloJ^_Bqx>Z_C?v5bXvPOtI}J{$MDJBhhi&L}nj`1Ry1 z7FZx~(I8rL)kP;2=pob{8nj;RA!y>p@KgKBhe+r`?k_Zc(D~CVO^iuD&$eYpN&x|s zPJQ51heiTHsPk^LExyp9ptFW0R{ML&%899XnQv;7Go^D9_#NS$tyCQge^8H*Wh>{lS7%GgNaRwG}wJ zyua(dHC<_}guBa}&W%;=o3_?y&3Dx450eiHd!9shiPYyJtCeA*0c&QilXwvK!sRTl#?9+gQRfaS=0^eJlcUkOp$-QXFj8cqy+3-^r^SLid zQ^xZUVKvYGD{>e5DL9hY2|+3&Hlr{b^|6}z$ykBaG8yT?dTBBa_XEgAf<6gOBH;1F@wh1J zDQj4&>Lcz<;x+cl(6vY*y5a0D#7K{`Z0E!UxxDM@p?ADxlgC0Hq29)KnkFtRD-=5` z7ZwHtk|L+BTYFQGIkYOq>CpRwg-g>Hnft~Y6C?6+;?EI6BrZl3W9nJy)*8>O;R>f| zb8W`M-|n{=yzsN$`=xVL{zEc0Z8?P1**5DK9Vj>xjUQY544A`A9b$%pWLqHB1?Kc2 zpwZ%JWXj9DuwWb^yv}MRd+ffWmtwCc$rt}62r`E5FUI7~ORL?I0i`>k`H}hiLyR)L zXA`UoO93$}<41F&9=ekg8pGQk*z`&3T(dv>?=D*G?PN6haS+0#rK`CT7t**1{WL;b z-OU{Ktrk(yJvwr^>0ry;YHG>!z_8(WxWM>su?Uf(#>fhtzZ>IJ{Ms}_6qu`_bIjb| zcEr?(=wm(ExB~#ngD^2Q#>+q;8Sl*Z4?j9cV=#4vOdxB&JtBg#GtMP@RkO-b8$aBu zS9{w|CYKb=crv#}GrO^c=KaiI? zTm`1+f%`Y9~e&L^cOf@m&OSEj_Oy2#U|b=uT9Pe-e>~|(-p$a zNw3d3Sw4a=hlkgbY5S6q8m995x7+&a8a!=o4u8(B=C&vCk~YIjE7b}EUGN!<`a21> zLzkamtL(A=>SZ)8BL_c%pHp#rOU+({QZhjD(R_E?EE-LW!UTd2r z&1(_UlichTv(~^?SVQBpiY2u@A2Zom`L`4ypnFC>=%?z9kMd|-Q&z-nmqYmU{!MGK zhRnM$I4X;F?yF35OKU^}!N(}-JmNeq@TX&mEhk43%q}+qO(>KV#0~s%M&PuROVofp z$;GHKN!gB+{j7ePvTdVvS7X#v8`JwAgqqxnY!PE*j>k&rjbj#4?tC!4twI3UqD1 zmj%fem-47r>lD7d)tR`RcyDOC+)f_*dW8N9EC-BOXpBFlh-J9j5O)_3fj)InI4g;N z_JzkZ{l(>34a$RaXM6HPsR&EZ^@W@`Ad@#@zG#KAI`Dt5y*<7iyMtvu%F|gS^Ble8 ze^mXHVdU;k=vwQ!(~pYSP%ZxNmkf{p@aNl?#BKSq7QM|IHB;b&wcx*|^{G)j4th?e zD^N{=EM~+4x5|qOSvq1!87qp%Gb?2IG`?nN??}Dbf4FtpijF`0>s{k5OO4S00gJgp z0JD2-ARz=Qs0ZzXj0@yZMw9ENRcxA*xLFhNDKZjc_Fdr7J1gLz%IWt%NXhw(*(zgS zSPM|=?M9c{!HQ0UXJ(RJb5*{22_Gj-U_@G=w4?IA!nBu?ETNLvWS^H= zb`+7|-j|q9=In-gb223 z$dgsq>!w2K3jH(p-2OseINJF8>({T&^lJlo-yd#Y2VRVv?g)<2X_y#&{wR|(-XOlva~KyxyPk{|6l6p7=i9^^xl{%2 z%KZ3lnjq8>QwPVL^y_(+iqmrQV!k1?`8U3h7Nxy|0EPb7&@W>Z7%jMV&)6%g9y#K; zW6iz8qz-|VbGzfk>XZrAu@s~L^dcquFUOJ z0~r_AEJOA&S_S6B>=Uw_9GyGEzjpsWR<2hv zl^s03F_gxFI#TW%E0BsZ{@qm4N2JK`+puPgj~(;u7b>x0`DnioTjQM!zdfs|p&DE0pTD$xrqq?5z_ATiGEC#Cf_HS@l}Mh4~GhHzj`#pZTn?EPQ@))!s(Bd79qSKG8e}%(6y=n z$M0yFFM{>i_4e7*5T>2PB)9G+d;h#SnA@Z;nwNOCzRet-LpS4e%*H4k$#w1M5Kzq@ zKD6-0u<+qfqvoe|g#L+AuO*nN98%wm?fo5^sd6EM-|*({-(RQATplbfa$7rkQv`cH zGQ-EkBqOBZ0rLfY9;%nqrL8dVp3n0nsV>#b*M#a6MKs`WVb1Hpk3tzRpNAFR8YopC zhWbB?U)7a4X&kmK&OcV^TT$JxJfvrrHSvZ z=ah}r#NhKs>Cit?g5&Rr$3<OSt1x zmHye;LbEulKL*9^Au`GJ{R~w44U82u@3%LaN4695Su>;-cD=~vJK>+^+*eTR+{cUe zX`CCM7$U~|^n^zY-t=dch2po-= zQDQ{Y*{*^*K6H*9LC|s*$BOdFQ{iwbT%uh9<3KRH)tf?n1 zvP|4Q?N6#(X&1Y@og6Al+hU7hTV2qQOFH`*EHz3)G)6Z3z6Gf9VLL4N`%_C`4h=YN6MQZ^EYeV-c;=)i_RcKrqrBpBohYP+0 z;?Gz5BR7*kL;VU@M}9L5J0C9u^bJon5`O@tB?^l4;&N4>V5_|_qni!(T0J0uV2N74 z3o)YpVQ8e?r$odh(D1%EwYkGJ=zd^nnD_pwFlXfloU^V$zmy^c3n+Z90v-B1Y0yOVg!o(Oc3UB#{CKt<_fy?E;AXp z&FPX#EdTOKjloDp?WSV3MDWWeoUd$ zD&PAc5LdR3C%aEqY0ULjW5k%>Pxm3EpDfyG(}ifpn%%GM6@L0W@mtX!A~duNSit3P zv0_F9-Vc*?{vQOTm`)6qyuD<)&R?QCy{Wf-87-L0)o^wCbNQd+L$LjyGGT>7DxWuo z1pMe0OFbav3!-4k)4y%5b^@teJ2thP<3#4y$+k{ygSbX zIs7qBA$tDvrCRF0Vm}70JE2RTNz^-5n8OW0ECar}gdm*;{B&nPuqyj=;KpCwv#T)b z40&#tB^ME0F^=w(r2{<+TGWk~Ux-I8GANqdH?=)78+o^hZ|-OCG8GLOAaotl@a)7I zmE3v8IezgEtO{On5V(P~=p+$MDrm%ho;}id{Lc;lJDwJcsIa|*lCU(*bBNozI@(D9 zw_KYK`j$J!y9pc9ffwloWny$09%?Hq4$m)HHGq(a{kew-kT=v973%WMj^?s5JJ8zxa`H683MgH{bJ*z8z%dBG@8qpDYZf!nVmG(4Li2#F-y?7(E zoI-I0qsEDzA=EieKytL({994|E0!yEv@I^4EH0MSNAs(GK!N2`2*3w2H`9As*w08c zJV+JFr>7wqvtl~R8D&LMAfSz#@hYM9qKpi?+yE729ot{CcJKJ|Yi*Eg)$Kr4<-y%{ zuFT@~-_x7$CG9sYSY+#HyDe@=6E`@H5!nPpr(hXsM*SmLY!Ax1W5>h{L5jgDl&JdG z+ScQbo=WusTnJXjbDpNCC4GUt{THcs$g#S9ftJ2Z5AtIiZ8wKMtOWSqcj=FQ zSux5K%KhMwFH}$7f~~kv^u1~Tkj6gk?L--d^MYlezb6?8S|gXo&k~LFxelS-rZ|%w z-0wF6%wGGQH7JN_C*jL5k6eqq5D02$CVZol8I-~YCsB8@suS%P0}t+>E84KRQ9Eb)WUlTSV1HUg>?g{A>m7=^mEO<*Pr z>}E1|P5HcIfPOBt+pi;j?@YR0baX{3X8KA+u?aTU~#f8%H&aO)@`9Sz7G8!(@xSb(-iID-YPb{is~=nUWv#v}RL! zfvCGGKE*tL=`i}Pi#w5fDcBy45gd3!)iPMB7_1G}UN89o9~U{X!lyw_o_BhB%TH!q ztQ~pLcDtNL#Jgj7(vAygmdP=e)>6poDxBNzaHL1cD~An1XR4D0YViqeLs=Ml!v~`% z*%zCcPG)2t_ue#Gd&%uEQzb$ok|}x@_&xSg{rp0wfFxcmmjpw{Ph04%$}sl^&KuB(|k7bmI-GOfzqGw)D~3x|@6> z{_9J3Y%SlcJVUu{HA=$>rmw*a>O}UNE zCzzl<{A#fIHv#`uGlIk~;qSd}F4T9VAYhsMEu!xo29{b(5`3D?*vZ7>v)#C6&D>!2 zr&eW9*%qu26yjJ0Cm!6_?axLZ-t4<*@1%RQu(BfhX&j{z*Qa6H@hCQTpvUT#qkLuJ zjQn&f?Tx^_rJ&93KT1}Op!I<=AH6SyW4-4;p9sZF1m13|C&9?(VJE{csYk{FgUa^f z*C(Y`Uqwb>snxQFqP$N`qwbi?dxDRZx`gxpeb>mv??~Bclo1Hcm;nUlN&W=#jq>CW zHrp=>5k^)$$480~n&)ZDua!XFVRBjsxa&PFh!!X`n^Ky-`HP-FQ=W(QHe@jeY{)Ng zXd?dE^~{5fKa07(5p`j4Tz$Cl-HLozKW%dq{r=j}09dR9S(7A$1b-x2t<5fv0G2RV zxxg_*%B)GhcXu70m9lT&QNpH}?%?tC=MvJHXDXW`fiQ}b55a4#cekt8FYa!qP;?_` zjh$cIjy6_c{ahIR&5~`2I{dEdjP|SG=8(I>d7<&1oroSEjQc|#59;EvZEi#cL*gyY z#=_xAebTg9hEF2*GKoYpCvzyWokROV)0~|3FYEf{{VcwX$-AFa2pHce2r|zTPisnh zU6UQB$PymRVT_eZ9+Cyj!`WFsZ3O@BXlm z(X_V$-^Fr+Ut&7G<)5Kt<(`ta7X^eLY$$obnxu&6A zybVFc#}WYoFduXzMFmi9_!TMyf5iwFoG>Lkykh>i!~+gpF!nG-r3Sz2Tw>e~ehZW1x9aIUo0 zOUhO#fT!JTr%DWE=MrDwfsezEhb=6w1FDA6POryP`X!(Go|7GYh&vf~BcZRXrIdgv zW?uU}5gG2bylr}wd6QAnk#l40WGxdG4|i0JS-FG6j{aDj-CK8Ge?nlo<-teOK6*o^ z6D`k>5yfAT< z8SrbdB5wKV6J2r+k67ew-+_3{f!?%Rp`mFHl ztJuerHYXY;>3-MWJakOosXC6?k#G|}Tqca+fp3t1M>1X}ik&7aKapVzy|u#<+lvLk zsMBvm1sITf==VXmb?^q5c)E(6TJ$k(%-BN_VPDxn-vZ1x@ZSDXQHyQrNa(dOkDNV8 zHAgkX;HSW&l3v|EKhj@GJ+t`9Or`YOfo=cpZRwo{Q^Au8P(5z4$RS#8E!gFwwZaRd z*FEv^;bcHV>*qWi!`oZWCvx_+v4cZ6r1M@fBFLeihoG_n)3Wv?nseY@gW=4~%<{a< zyb7oozM5=qqzATfRd4qzGib^d^{VUhhI=OwPPC!O`oz}C)b&22%+91MB`~g!3+&j5 zUAK-6f4;g1A81q`={JqeT6>;OOuIKBC`@PudFEeu+F$fN*PxA&axTr7Azp}NXtF6e@e1Q5yjT|NFGSTn zT(2E;+{-XH8!vHwZ^EK61jiANE7R&8gN7-f?tIaeAnZrj4H!Sh9tr{Rv&cKGre+oe zmIj#a9X_oA$uO|K)wRzm6oj$30@-PKw8M}R=xFe*@!($ms6$fJQt|2a#oULD4*1P% zW4nj@bt|Xf1f{A}4Ec3Lbh3pr>~ReIq`4|;hjN+1-R>^Y08G=^?fi~mz56O>*MbfH zvSR;EcS@d`MEKvYnH8yW_+pP=_ZGp&x|hm__s&x-?RA@L%>!UhyS*jTm~^>_=94)H|)&HG|Y{i!kJ%X5xEz-^`UE z^ZE*nq?r`c5qrhi=ei2w8{_Ty@^DHUT@`qka&?%S5#K>A*kFix<+a^w!Ww3Cw|!fi z?z?NvfBs7Xaw5T5PxZAfaq9aw6&>21S@q`K<+e6ci)ZZtpRVe357%5mUA_5wWOXEI zu>Nb6J`Wt06FN%6KrX|XU`HV`t>rXM3iTchZ@5Xn{4JC#P``)~aTyf?rIM4SI|fga z{=%XDx$05K2$)N^Nm5I}cN9*}KD?@XFQc=(GGIhLYz0xx75qhv$&R_29Rh{Sf%9=I z*KbH7$Qi@tL2GRm{6aD^4D(AbgJPhN)hCj*Zy5o}TA3W<8V!d#n|y%QW{UlhIr8t= zi}tB&0s}EM0T|_}QhiR|VXhwF!9k;byXH}6`!KXHv=U@4d>8OoYaesjukzPcz&cuT z91cnM-4y0O|Fcj!`S4V43u9fMrX#e*m8z3?-T&EC`QIL!0~RuwF=+Sce6$;j0IiI? zc=d8gaKdtaTcW^=c0K%Ww##-@m@l)}dx!eTD14o?GU$-K5%g!Q+~DfW-c-#ww+%AP zon$UPg|7%xS>VuaKv`K_R~p zZq#xBI8weITR|YBIzv5DPane(846QZq?RED6f@dzX42YWmbSK$^X(?0YL7D{BZRIN z#P62sVb<58$A7ZMxRua+>+3Jyx7pfuG>VnU;OVSs%EGv&Lm~ zaOFiPc6!hVPp@MloMPIF(a-lqOB1t2zxqIUmBX_IVMZ0EYbq67aH6KC0KGV<5!tLW zIWeyIy{WF*v_{idSpc55PV^|vqsF% zEQY=s++T-9F$NWX8k(iXs0jRPxh}yl-96b~5{s9n$4a5Kz~bXrl0A@Sz0c4GcGF81 zMoNECL4F{}6Gqa}@<~b2y@22UFnIfxh5SD1Sk?!4vHTy;$D>=a7VCecuCK3Kf`8@s zo^oQp_b)xKgSqmW$~3?-Z;O9F%n$tiwPIq@ayx=I375_l_&mjI-hvtES~1lhb-$zE z&Z@nY+Y6Rb&UFwxzmc7vVP3`2Vlcqtyxga#WCW@igW7|j4CN|>t|!V#GIp-Yk^OUR zwwHRY^-qYCDQ;52*j)-T_M_6<#SGHiS1j9xU0$ea@z6e-6w(}!x4*NYG=+CB#s|k(CT;eZwh258 zcLZ1--%wJJn!a>c!B-6qtO;@&-cTw9Nxzun4I-bot5TVSv;P^&mv;Nn-i3txC=7Yu z(R#&8f{}2!19nTQX#a5V-TlesgI=85!a5_Nm||gGosaF1T^Q-gwiveo(8Y`eT76^{ z)np757Siuu_@AY|Y+$VcGlQ{W%M7);YkQ_G2vtaQq7NTbo3&2f0*=t@*`nhfy#6H4 zou<#NZMN36y|^rdZxR?gCjY;gnM5W!cWU20y$zN}<5@vj*40 zl0<*|-Nn^_OwKDi+Xm&IKAw-&;y2H-m1R!L(_zN~!|`nUyFr$yZSSmG!CLJhsn9G5rF?Cl~WB4Pm<>*&onPn6P{i!}C$~6r(ZN ziyiW&2b+;xJPcK&$&+R&^I(s+NA46U@E?=xlaf=60^>w5k&I=wymP^EqAvjT+TrLw zA54IHDL%0X;LH7$^l;Bv$9p^d6%X$2Eq$SfHlShlMy{|888O=STCV2ClLFjN65ae+d<;zt;YB6dRRv8l?EUsGC{9x6y? z3*H)NlcRg~%Gh9<%I1Zw0JWfv;S1IKFZgGcuNjtkP(se~h*m36%#RQRGkyG6qn$nG(e)L>-}Ns0o!WCdm&l^=TGJ*b z+~3%#m%VAjmL1-b-?l7e|H$nSa8U1@AhIDwzosY>1bh#MorLN?H+&bl7^Il;Q|EaoQb95e zQs5`>M74mlA!aR%yPu-C!b0Ze41=Hjd_)5QjfP2awc=d8gd1$GnimvmO=xUf6h19^ z{`E?HCy4OW79B?JGSoL^#`S5z8j3+m!i#YDVT_ljw}V8KdD2%WD2U*V(aKbDW6xBv z&)%Esg!L8ZI^Ke;nlllzzYr(K$;J({X**lmbuo!0(6qa0E^}}=Zx*;-xYWIWj!CU* z+gRCV&p>F}$iF9Yh;o4V_kR*&rk0B1Le$;o#x9FaXZ;9m0UHq)@UDX``Zc1JpPXZ8 zTBP%XVY@hh+RrdyGrwPAmwVbzzIsnLx;mxSTHE6%=vci4bk`UU_<5pn@+*CtD*jb4 zvTJ@8BAdb&D`f}}`VkE9&ELk>HO8E*%+CuLPE>8D-)1a~6-dVo!`Ss0Umt z)wAsR?q?oQ&GvuKX$^k#!^1ja4rK1?(_#BrQ77<%%ab2Oo&A+1ZxJ2Jl-IMmwHLjx z<1bNm(#c8S`fl%q1h)kd#}5V*uvSe=Y2$gyDtNhe0&$?X#&ntb6w2G$3Gkh`OkS@Jt# z45%{$T**f0&{tL=#O{GaU(W+HxnZ}{X=4K zR35j91}^7i8Zd}(I&t1fIy$@SNH5li2BNL-zfPy8XZd1(1&`v3Cbyuqz4Ect}W|h9M8b8cO+*Fb6Rqlfob2iG>b3SLOeb`VmuZrpgBh>j}!gD9tsX)dvz!4ON zAg;qqnCMAI5L;v`NBGDPi0diusTlMDwf&eN<$~=c2b6_Bu&D(D~8te@hK|qh5gf; zK}z9ZUqg3?dkJFTk8}4`?wknbI|lb3GZu|ayvwb3`KZ9Va`u^zCu(MrA!XFe_D^5_ zQjN;!NlsT8jtZaR8ePxRz*w{s;#cDf*cYt1ydP6IUgkCp0S>=m<3KA7ns1i(_uvmJ z@RqCYv4hR;N8WF%$(kMp*(nj9o|zwT8whWR|4AQWx3M9|@9x?S`JKY4KM0+>>h@H% z80R~nhHwGvpS4_3Rv#IP%vc7yqzC_^rxi6`4c`;lclte zR+7aNB}tt$9bdIE@E#RTh#9%^o{@a|b4o}@aYpK3tD6=K_77==XC5Mtv@fl+1=vjT%M7n3E9P1(%M z(g+oVn5^Rz+mMyej`G~6B!3Txjc z53EewrgWHI-%pIC$3!NUjaEN0Q*VE z*`549!Wp+w#vkSE-BX6#`*_?R0m~-Lz{QWeAt`(aSBk(2tU%qWU<$m=X>TE%{ID3> zEwjMS3{idiM16C>xhJ2b^h13Bb19x?lH%{yI*yifHK|Yl`4UN3U@?Bq)7_l;^VSD9 z;7`BVy{NY<7}U6s5YTJz9J3ouEe1(o(Zl zRZ+9GXKYGsYKy&z9T7?1e1FIB{tNf<+|PAg=XIW+`)s9@EY*#y_A|Ewp4qeJlZZd- zPw{;Lt^{AhU4=SnXL*-QACeMN6+S81rv+Si5#xzxs_Fe8&H16$T{!Xgui?;RhD*+@ zwOvQN`Rf17$yTM?YOKgW*M#UV7z{J%ZP&@{*xjGYmyuvil&-1+Ulq?VcwGb*;&>bO zKnTr#&oAQ9L`!G$@gX)Ye7#q?VH_Lr`OMV7qOlQrNClY#*X0L&Nx5ACW$rn-mh-;Ra;gemBL3xNV$HKHky~ zIh$sK(wH{YB)+H@{w#J<#?NnGnwtoUifU3O)U+Z80s9yvvB}MKO+fah?|e~JKFY!} zW`yBnAa9|)=e2~~&jFuOdlr|@wrOoAe3p~{7Uaqqiy7}}69X->?|~pWbbS_|(zNZ= zNPwwyZ@xlaizg{X6SNdkZ-9bD?#LQ7vv59p`FD>8sEd-ABsA=FLpa2@@X}Oeuw_3F z;^nkmQ8RaE(e=(4n)K_4vp4qZ1>zFu6E~+R@X!W(@cK>vdHpX*VzOw%jvLAY1eC}0 z^a2&NruO-)x4>pO#AZtlObT4%ZJ%VDxW2HxW0b+@$Lv#K#GesULk1Ih=|RokSn4Tx zJCprjvPnv#F(CV>O!S6WGbr#oTj6sxlhkYL$OiM=IC(azjGeC4(~y{ZuQWpAJ*Ot& z&i>(f%#?8w>7teH<)a#auEY!?(Rb#viNWwO-Hl#UK~I74Xo2DC(jA>)Z!XvDIzNQl zb`4$rZ`huipycd0uH z(Yx*Qzr3UKliIXy3TVT$$Pyg_I7bG zrzy(9i&y^Q5pG^t^XrKNWcEiiC)%VV(UrSiuYU}~OQA5kJC46xWd2%Ed{-rElAJC4=rS_7Md4jL5fLDF4m5JiAc!s>SJPAX?gf})MNu6iM=7BKJm zUfrr=d6b)-DzW=x{B?KG97l99m9e_h_~dCoF-;1mK0vonnJb2DO-OPx26bQhC-&gq zld};EXm_18bsBNRzQ1Nb@$U|bNzp7)j_=Qy6E--s3{^#eVH*Qu$}TkAnp^|-)J6&) zwF&-hd21rJb%bmAv%N}-F22I}^In6}ZvT`rIy`7eG=p|LAA5P!qkgo80UkRv^S$f< zurNW)ftD{%XUd=3J2=E>sBshf8(qztQ=YhRvAs```KIH;MTjbDPI^uMU5rJJTwQTCKB@$zA8_oz5A9U6$2IWznlV7 zW5y2qTxWgnJ#T)WQfozBMmM}-4+c}lu_EMq+0%Y@r&Gi|bqK@36+7S^&nGCHoZw>_ zp6K@amu?AUQP=_?WdG)8{K92)gJJ}t&Vu+B^=0U_BJqtTx6Po)pU4$d;78ZqbB^!S z-C0qBm7svWMt8>`8p&X$44^r_#yz{f@D{>1D-eOjkb4S68ejU5g1Z_}lIotPcNYnjs6A87UP@vgUy)V?1iG%@|4Wh}ZGh)s@Ze4mO zoNZ#(_PeSG>Q_Ea3R2p`eVp>2FmLW=?uu{H7%-Bi1Mh_#4&botutS_-DVz!Tuyo(y zLV?7}s^b4y0P*1=4h8~!D5t@5nM4EHk6xQBV_$6j1LF^1rRqP3 zNn&U*T{lG@^KfyW5QZ^SugN-VQ{O%&R7h9gET0Yqw*p`B&rv4``k; z_qJ75o~{f8G_3Pc={nqNtpzo$*O%Gb@nE_wcR>dcLnl7GN@1bmfjFJUy0g(_aap7X zJNeaCJHbk|ONhr1z=yvj%pmnYfq7-SFjAmI&Zqm!0C}*Z=m*a3s7#iG%F4ljO zlm76bn{{E{=^$L}2bMw(4ZUpH{MCXzb~6B<9vp0O6=q;9&Elp)SZKKb?X~3s`7wX6 z7J6_+f{RvFa3}{xOC;#|8@WjQG;B@xo?OX*7k`EHXK42g(kczsxIH0dNchxHy zF}U8}3GjF!WA}cpkywTxDlD7Bhpsw`mXT1us2ai|1?gBQrFcCeRPl~=`eKMvfd>x{ zjZZw)IoN=2WT-u^EXDOGqF9|ZWbvlxS)ZST2+=S(&~&@YR$E=xYIB7M)OEA-;Bq5L!ZrBy zQv|;RZnbkabyQRL+onJde0m#tgeb^XKtnq_Pa{O3NQJ3sr6s7#x!f*I*SlrR3|;0^ zvq2kS4nJf`3zs?g5ke^XR{CCs21X_ElMKV@&eEc^)p>x23yb%+)r%9`J7;xj+EB#}2U$>;*5pn+@0R*blCKK3#%BQ? zAUGqqhylgpJW{9YAJ*)&V@JN3=zdqthMEtUx?pB5NqUvn-p;7rLytm(eXh%);UU+k zLH^NQTY?MsCMVgNoA-WGTU?5fgi(>J26!`{sJs|X5|;V(qfR>G*&r>de_SINnkm03 z_KdBv!hg6ruTV7~5oLh@uSKnZb`ctm1ZtwSCO5350W+RXEZ^~79lXYO0RD1Xe$usL zB6mdf+haMM2G;EJ@uBKwVcZUw=b0H`FGO-@><()(*cB%3dAzDUgY~j=5l(y`^#g0| zw-NvOq?W!qpndKyYng`NYu$sjC-ih1Agz68eP%)aE&QFUdm4=ova+;e{w}@?^{L;_Z^!;V?dn~4M{^Q6@Ui4hVwiTj(he(#d!d>=K}NljhkDq-#m>w$ zCJWLD{ftP$^*#~Rq3Zgh1<4%C1v#p`XbNd8DKFZNrmKN)Q{V!p*ZL_`^I?10a7yj| zMIF{ryre+ahie?Fi_hQkK1qTs<3iSnv8XC6bz_@DUOiF~N^pVwRQAOavai|diMR+_ zu0o-Yn&Yd{%{?ar)LUJNKITiqN-2) zJ-Ef8<;}rjP%6z%mBgx#6+0|%k-lN9*hW~f{On^2zw-`uuwEM*?~v{8cANfd$`(EC_tuoUGh;5$lBS z4VoaC-0G2T{^@j1mH;2~w%mL&B6VV7fp4O$^j3KZI)OEnOig5riI91=$#PX{Hwlqs zuW~h7;4AGpO}!Gv$v=OdJ{9T8{zVg%&oY*J|(ZRM=?nQcNf;0-~o4g_ebHunV&SIfW8VyW@q%^7;pvO{q5ls(>KR zC>%Vsxegi?#7*v|M$0Hgm7%p}8(`u{f=h0!E@{M0MEgmggMtwnCcIx&WF4x!~)(C#hQr};`0D902$Of6oJsk*W`^+|4oi~rDXzY#jRYj zU}^BqjppoJ5po(K@dWMhx4>g3HpF3vtF!TRv}x=IhFJtTT3n_JGmiNN!9-TC$t4M5 zXIh-{81CBrWB=KRB~GpC+G1vIYl;)7?z<2o1GKusy5#^r&h#Hr&WHuC8khoR>Yu3) zk#*gFMWL1Wszw3_7j2~)eoXb=O4R(_GM*sYwW)5;?SR}}L}01M*Q!;|0k-sSBRJiC zHq1D@c-{S2nYq9aTQRVP1yhEc`*l1%^eK7UoAiNAcS9^K+z4CgO+cn1H z8$6_lqV>3jYX!e#EEFP`oMU803RNsO#>HK^=7JCa;5@Se$1RUeMWkhsu2Q z8TRpD@qREX*JYFiu}W*-zJLc9d+q|qL`qKTyWmZtRdrclHtK1sI;mWsqo*O zQg?Wv#lvjrthkbV5Re*HLvLbPw}z#9FEfR;jvgSRRPOsHoqzZ}ApvEx9BQ+?0!{h~ z&N%YWJc;(`n7Ysq$qIkk(bE{|K#}ssIlFrlL&yUhKz*v{J|7ovMzh6;#;oji;#5g>}LyM4Q6(_~P}yGpMRb}c$}-NRpjiv2p(X%xjpTrPNtH?1lgkqO|I#m>Fj zOv2t=PZij2SJtqazhekh^03poHnwcO?`VzwAzAu~3qA?6smRb0Ld6bMW0T4XPe0Iz zBsi1qcxGW1VYNmYgqkvs9G&1ha>Hbtv(T4mKiD8AkY}7Phcx0Q=tSfZ&J_qrQJ*gr z-gssHUDqndyNQ24Dg$%7MvE!Ccv#JM-w@+>wgs0$uR0^BW+v_Y!>j6p2Axn?-h?|< zA;-^xpN^GJ8e{B(@N|o>!35ipu(k`HZ%1OuQ3A#4>4#13^(|62%GZhSywP^Z$9C?J zxSL!n(TM+j(Mr1htjpYfs2{pGcPEDapCr z|93so1V8%b`YdgYaiis1IW5SUM6C*v`bj^wb|?q83#NPr>7HHz(GUZ~rln4`Trrdv zb0d?22QSQi%-kJMb$afM4@cfTup4`5^C;W$E`G!S9JiJ!_w?VKUo~e8n!h0AiDAd- zLy#AB`SM-PB~OOBKk8fUm4WCq$}jxOL+Y*gnNE4rHNV!7o@s2codYX?SAq(%?2JFNl@A7Zaof5T=1vN0vW6l**#pDa2-lpG`KWSmNBW8w>$KUs z6>!wc^(*i9q~PAs%3{ws^z9ASDa{fy7yop@$T9Px(sCa@XIAB9kb|)(D1W6uc)BG% z-zM9zendFsd`LB796d}g*vkrL%DJNi;R`s>{r-B2^GH+IGQaj;&w2yft_o1?j=FuJ zVWXnT^rY(erDxS!eLhmx`Sh8Y`}qVh%yepV5SM?iB?XhTV{J*e-MR6HTrRGSn~d|D z@^z_x79n{jV1m4@TtILlGN|H2KnzfJ;?x-sX}^sd2eBvF*?XpD^u0?nv0K9tz6?+& z>&(Nzumd7&?#t$Q*GR0eel}ICr=#6@d<~adQqXBQQokJGMja^Ot!&F$7b^QA$K;lh-t8_(2jt(`r&pf-R8p2V1&w2v#^TRsg3k2hO_GT1XhBFQ#0R( z4%vfad3RQ8@5cgvNtu(-u(#zeFu9=w3956wNeqY7y7@g;QkwV7{BeVt-b!8L9F3n= zY$qa%lS0Wbs@3w=5@(!oD^xkQip$)G3?&Pim8Hgo96aK%y1nKsCs|fHpg`MJlmBr4 z&v>QspYiG!CH~D*mVGe)G?qVK6KUgB^F32>rQiOQs&)sKR^QOCM3rzM0JbPzpVxT3 zA2vyF!0^$Eu=iZq_9)sYQ%y?3lXo_S5mFw!_&ft*{xbEo{eZj5p0S!w zOIU|?io<&!)l?tsNF&>96)D4fI|7Hq@tPo~p}+5NWa67uw}(tc+v| z@BIdBKXytHPHV_&nF9%b;9a*g80r6aFO3ATV%J}9;Bw(q@JqTW#d^6!ox$CKr&T;B zcsp4COLE_f0>Jat=<*sV^kiXi@ znfrOd89*-R;Zw!J`#&7YfNOl>fSmZKEWRIN7J77*L*!B2;}T>*qk;Mo94sRn9UgGJ z7$}8@Iq8%NaIfLAEhSFuqMg7Zjsj(=0j;C@byc`Kxn>;n7qcP*e!V<6iFuNKEej1$ z>A2;BWnou`(~<3S2a%OqOcsxL9j&n+6F3~cV<82)orI?;nN8g{U>=cM7gqi7drbxW z*bLJjA;v2y1N`{@x-jRLHPr$etXQT=PMW6>WAeF+ z@N>xiwO#rs2UUwJXh5fwtjOsrYiG2jaba|U2Byf z)G!l!MPIJQEUM)c7AMzQXt{-&C@qc<7k>*qo zyOW}aeS|;RMJu_-*3+Z%3e%W;-t@bmOZ8)7WI3xLrs`SX;cnfPc?^KF9@J>*s?4Ib z0MPm{5_2l}?P$`4pe)_hHxFPAOih^7|Cj1y>Cs|arP)@*1_4D8wJJg6UpUO+dva1d zt~}Ba-Rz#x*Di3{gy^_)fF~B55tVuwufbhWaE^~&0n(ovz~V}WL+sQSr|aQ z=K9sld)u3`d)9?D>TN;^9UByabY?Qz=CR5XC&2HI0_mDVX4+ZVL-L~5ov5_=w9DCb zUZ6s@b_-%MPWG?Z_2yUpD%4|bG*8999dHro&6fBSvfdt9)mHbaa14aIoEElA;K7*i zDgsYpKEW2>Ua3*|z1OgE}s-5b9pWWT+xoVzU2ILt#Y)H@KL_M7{{PkEm>9 zSv-mw@G}6Pwed6-=r6kmk7_Rt0d!IZOHdF+)ghWYy%sd_gW;2*R%hVxG9J7*+r-#Q zGD)n&rN&W3hnY~4P1hw@B8d_^Cr9fo8F0TPLBL#-58onXf zqG9SV$&ziIV1m+aI%7>fuE5-+iMIiobth8_0Yc; z*qzwR0~@FU3SB~SAq4-cDx8g-F~~HTR{hWv*NcF;e)%fs&I<+aW@=0$y6%42XH@Q2 z-BJulF>9=|&aI9lSldc!KT~uvw3 zYjDNS)jHzE$GgcBs>LPtn?91xSHDxO=<>C1VHdVD#M6lP-}1zD@?m|hVE8H$uc~jg+hSHW@sYF$@TXi;<#sAOb;1<61kSLr_B9}X);>+j z{b5N>*5C5fj9RQd#oYrMFS`uSs{ayp!S{OhR03tGBIXlouH2cw_em;bjC~@)oDxa9 z3UG9ox5I)M3L$n;nM^v~YpWkEb#3`o-p>Onc_$EmAk^G$1fnAlHPsBrcb05LWw)`T zZIPxL4>e-vB0WmsTr;Uup=e9(iH1P6+CU%Q_o(%gwH=d-18-ei7w;5~Ee^f;gr;5t{IEYXk%cF9N4PLLf2&mp>-vg*)~^GexJ#-N2#a7>sR47`KKY`a3HV4 zmooz(_iNOl(tm*9-HdQ_0!i64YwDjj^1ou9)7++=n^|&vidACt>&pFa>%i=&;x%&& zQEm8MV>w&Hb`dXGn1;lnE&O1yuMZd`!N%|Rf7in=yb}NHuF`*+U)u(}`3{cygi(D5 zLmAK`>}m^!;e&On;md7z%iBzo-t?DL5g46zGtgg@at5i+Wtge8pPl?FJio1BawSxOQ}p53t6TFy z7v&4NpQ?NRKHU{ezWCb@zE|}4mkct|0|SpAzzccw`W&I0ezy{JO|?8FyIoYwK1cPH z>|elq${l9zj+^JmHkc1ziyObvN!nhyE#?Svzfw#H-~9TJ$^alto|8aA4164NkuSgl zSpd>ap7t!X?Defg9R901maZUgA$m6W;Uzwc3!tN#Q-o35KJe8M9R8fx`>~n4Vl*xy z0Lg?PbImLkAv@z`V7h0;QG5|gvfypht~JzOsq@s>YaH`ue_`IO>=-V@^?@807m?Gt z&8~qU{RpJ5z6OHN4^pj07Ahw0zzIxvpD>b0HbLpBTO*(@SZ3uD)%2pmsU)*y#4Yv8 z?q?0|$5GU_41zG-*pIZ`J-G<&qP_X)#HZ>eh3JhZ`{pi{xf8%gh241Q6-n}iDzcwA zr@^QHdAL3uQkh?|I*!*U730>LrTz7mcY|p~)w^LYH91k4W~aL`VFel&H5=m*5+|FH zGoi7E(GKsbA2xoX@u%)bnCRY0i4b|(1$2g?mhQc^<)EwNrRKEF+x*Q=aX-ap1VWgO0dyIQrmxlP2dydjbfbE>SFuJMSZSL7&$U3*qIW^PVAq z3>_T&EP5+#X7cR|QqdfGe&uI8ATch%ktA`~yNy&;P-Oy7TX=vK33UEl#qX=qaGD7d&_N*!!h)Ld`lTe%-L})4D2d({joa4Vz$Qa8hrbb z1vny5AK-@W8DhtxQ?w%w2ZMbYwM9SZfnQx8wgHJI>%X}kP9p5t+zXzMJGTR_qg*Uq z+3Tsbt75>fXr2L>NcF#VA)QlX9ONGi5ek|HeVSVtrI^srz^0wNLBL}wGy@N#gTk{~ zx#0_2UN68C%0$P0MK9v`J>7fCEE#FGz0AqieQCGw=vLG|ty>?B6YdoHxL zhsiSDETF}F@4%o3my}uHCxu4TjpAKmLpU(lZS-}=p6&g=fM&uW`PEz%2ibvr%H9LW z6e$3fPopUcsR#MTA7@pIQzUPSzPwJQ4Q9F+H%r2CyZZvVw_Fe6dk7rIL;mY-L0cDZ zl+4VDuC8;r`i83fFBLY2uJ>*RdhfW@7Z&LRu_$u<18YYPuNlXrM`zESv5(w{La?<* zk6~C_g;4eR<0ql0-tvlSBtob0VBP`F@IFYPgc=Z}#t7fGs>HMX=DOzZPV2**Rjbk~ z6$<-WtjN9fnixX%s=&xuMC5tg&0XZ#wGn3ti-qnl-7V7SuJH{uJt}e^7CUiH|AU$G z+kt_BPvoRZpFw~u=&#OBaf3VIofLmnywEqsJE}}n0@(HQqirVRl1PD{+RLt5DVe0* z1bP9Fd$$VWV6bZ>0uW%G5L$Jg^bN*BH3k`CEDioKOWAN0^2Z$ZVRhcBAbVBqMfc!u ziY{J>peS{^*xTRrxcf@1r2}btlic|N&dsLwPV{?V083qQDG@Uj_mlenRob6eUV9cQ z{xEm1n}J8)uwjl=^q3+f)HQKo3l}4fi7kUGU6y8bVnrx6BxGye>jyY`>1tj z!-u870~}>Ind|+KriQ7%WYChj>}Tz%LKI)1zKM&|2{u}yZw_Bq|Y>ife*`qax{|6D5aVhe%% zke7y5p#~XU?$-N}eFu@T$3bTZzalo4Tx5`-2z%h#1m$0DVWQ3T!QWV-=@zDO4G7BW zNQElGg6~hB|1>FJiSr%gUNlg*0n}AWCI=D&lnjd-W@kl>@wBDx1BdYR=zRV+R4FV^ z-bgNN{#Pc3BXoIH1So|W&=Okuq9r!kCAfzn+NRsm4h%^au@og}T|#H<35uuMDBP16 zH7~+m)V79G(AXW6{1*G>f@%qwV*%p#(?v4-ILtu)&N6jntO=FngoaHPpQ55_@n?#P zGUet@BdK;qEj=TIN~#L|Pp^sGVo@df4zoNV7YRhQ4j?l@Vxj1pYXcs@Ea;G>kDZ(P ztGDhjt@jK*fI@|f*IblUJ17GCW1*lE+{A7Bt-ciLWs?(m9VB5CA%_DepHWkUpTAxL zZ}gDaCu&F1-tAq&?IpI!cAzMOqTEMXC_nXr9n@sV43`aAxXnZ-la;el7ezkf8ZReR zvn6j3`|wGXyu3^mAeo?Sj)p9?&$nCoNe2hBA}cew^UFHl_qNp(6EKRklU4mpl>X*C zo*v#mS<}u|SsMRGtX%wT$mX*Eo{%B_$kC((jB$=Yzv214tdBN+<`=732<*bZ%d@jv zr+e=W+4oUFXcf)R^Tif^%bWlsKQ_xH7dKcZlZCo+K}hc(`?utje>25cn4PuA(<$?N z;FAN9ixaU$MGyE3NxSnGfHD6l)ezKEK@Nlbs8o7WI%oa2Gu^T6Cr*_4yHl*aGXBFh3 zltfmhn;}t$6upYI@NaU-?2kbd5R>~Mi-@jS>5_-Zmb?Ih9x*Mh!(@U90U?H9))I~( zO!l!mK%PnIRj{AKzIqer>`BIl@gO-_>p3)lwe5O;PTn&dJ#ZfQLBBZm0PIJXnVN=c zjJs>RjQg_fU)?2lVo4*gl|mDg2fLV#p3qpg;*yw$0Uf&p1QU%21&pn{xR84n?bBM( zO0HUhofH_~qZJ|i)M&!&O6DPZbptbPNjNbOEe70Um9C%YdoL6L^n@&#$|Z$0v}y^y z_rH`w%?r`LbBzMMw!ONCPa&Y3I!6S1vE;6tSW5BgLXZ|7vvVpuh5o%zNuwDHm6nNo zg^1xOQ=ThW54=m`iQ9e@s(nN?mAKSQ-duv6S(C7q z(JY}izLS?|aA$y3xIdQe1-he~cp4HOjT}sxxI;^WV@F3u z1Yq}bQ!WYMVJ4(I`Su`oJ#9O91okWx;a4r+RKon7gUoi0VC|lIpbn%5WXsj-!?)`j zz-97xh_H)wZ*>Jweb!FCm;Ga4^e1qjmP^ja>qZIodv~|YPx#F-SPNVFH|_VG7km#p z)_E*;iN@l0V%r;%{2TRB+QHZ7kxr|2x?TIFZm1_Ce)moj``9XRR@Kkk;U__#?lEg7 za<2d*4)LE7t0Dbc@q`y5?Cc0M^ng}EuRhpb+f}o9->VX+_W0ttJn|y(Sgsf!G=Nw8 zrnbMZ%ej6`L)|FU7W`O~;+h!F6$FGBzs1je?`&L*zmr0r$~X#pd8*5BJ83-boCe13 z^aSNAF-GVjo^4YB#m*c``~JGYXm(^WSo-mnyeeKMeXG6T%)-_bBAK-Oxi8?@S_E6g zl{vW8-K<8Eb4}^fF)-!6yQH*{qC--pJw+g$Bvq-4;}Xg;W-9EM2iCJLsn9 z`n)UXBIyysKN0p{ZMIhNRhvKSy5Z^3mz`Ylg7~hAirlzKEG*kf%8tK(rYkXu8e~sm zXE^%U6!K+(MG&7mM(*=R-5nZcGwhM|`i@c24}J2VY^GuF;uQCzs713_x-Qk4lekd9 zkU?`mb2##M+*D`W`$8yfJy`s-cNT4XYLbMi{cSVDaiy9|UW(bzi}k`~K+Zfg$s9%} zfNaf_b4~dn=pZfs^&7Pvo0@yGUPM5!+1MQAjUVzZtW&Xl;$i~;T9UvUSMx^?x(33j z1PF?NJ*iKu=o}OqMlXO4k061ffLO?9OJR9?ZbsXomSVOw?CwcNf#{zPGU`fI&qjWV ze&K8N4`?{yZ~NooE99s*My|VDU3I)d733u14yRf!7;_&SIFYY=ph&Oz&?4iX!uCih z0!1A)5p^1j{9RE|eDIbVLUls<4zT7eANWg7t!>wxMpQUa!khbknsO=+@80xOnvogL5;*J!Wu+$Vq0IA?Cnta!NQ-=1CQtk^qUUGa+c)wcl$b5Mcg zSZ&T6U}$#t(RuDZ;VP3zS|S~QsRt|)w$iH~0*cj~1lcpt6$ND+$5Y>= z(Q<$*klq6*-GLYFNcx)f14Uezs{@>0N37XYsJSfN!DjaxJO({6|JBBPApG~p#GUyx z0_%>JZJ1CXs!9!b{KR$PY8gv6hVDJ*^265OWpYWdv8{8pq-XLbeC-SBFLnA#FzInx zTt#ur3*i9D466vTYM6((z6!#>=3I{RDO>ELW_`{}v}p zC?6?NiBid+2;`&fh1Hhu)IRhnWt?rJG6F4GO~1*KZXrZLUwn8@UNh| zo2n5lTvZqmc!6^zx`0a*E%rj&NouOs!9_LE{|vRG>$e8&#-hDXj`*?YN*vOfe8<`skT;oV>1Z*gS zxE<8~J}V+ERYP1ccHcbQ8|%j;Qgi3)=mE~^Zf#Y!N;~z7?#>4bfCK(gw>23Vv%(qJ zm--}i!5|$>EBG(kVFet1Vx#t^ayWD9%Z8v;#i2uiGdujiOiLW9<3WW6P1NErGk*;P|}cHF|(= z-2+Jt;{u~-|B@n#$!mZBwB#fj>cIg}k&;{-JTM8qJyf{B$R2NUjbK28;80Ul+mPx! zD`7Fr9K7akW9At;VvMCkRmUjt`aI~2BN&P5Y&2?E*FDu+Sh%HcyG1LrqA5zxntW|( zmWfoUlP|ob&fZDctBvT72`B9Az8N3*WBwG#Ay(TfTi)fE0$H`DGKcV7{O%}Y)_pTM z5aVEl;u=3;NK(Y0@pdpxxQvcW4S34;u}@rwwj|!OKnd;v*_*JW`ha*8G z-VvAKv2?H{D7gag zi8JU&Mutu;5w~~(-^Lf^&LrL&{gWK= z9he7|#KC29M6~ZuoSNRf+cprl2CYac`!wR~N6x${+bYRSsfgKWf=>I*VB>dJ`xB;A zqA%Z)zEg88oqL51K9oDq-YvIA7$*gw)G@U0OXPc>Xr!45t>9YP=zDAm3YekC;enhiZtVOB&^#fk_bTGpufAl42U4cuVQ~Fy6>bXyQ3Ca~zW%E$O|Ob*^t8*9G|l-&YX+?R}8m1i+04;rp+ zpqt@juGpgJ>56pCsce5KqBA4@$FXq_P+^XlOEj||eS+WEDk1MTOU7~0V_Itoo)QGp zx!IMf9Y$Pa#e(X&m~BbU239Gy24%YXU^%tRJUi_}5xBPnTI%|liFl>okZWkKyN8Bs z?+$fL3w57kzvZ~)#qBt@vjrR@J+5+51!ayNg+X^@mGmQmuLHBgK}4}vj}kP?8S-*c zHO$R___M=IL&=WpxSRq(Kbd8#48`mZMtvndl`lKH!YlH05ih_&bmy;w*FOBrARR6C z+eYp##aPVc`^yd1=BIad+vc5kc=XI@Q*QNz<$E+f-^uD}s=&fvJCID*Z8UH#+? zrjBCiY<#;ioYkB^eKr+fU6`rK z8G-wbCaTc73GNIWer}?-BRdk661~b^Cbt~NSXidWn9b4;$awNp1=wfD@kHF>zt9UzK*MDa@Q4mxG(pZdc)O5*@5|)tS%92Q5>@Qxu(p^F;KfH??fW6bLE>)WiItH@(`4tDjB7$x_ zPN`BCPWxR?a+!+eP<42a7FK1r4e>ZC*9g+Iik)~7vV%o>Z|i1$l<7=K2@$K%>lYTq z*kGTIT0;8417BynYbye6k6|mwn4e9zr#gcJyh)n;0Q~#Ry#gIL3H>(2D`*)Gt=3<9z|QOGy7Sst?^cuk5C$Go0z8jBSq8HVbnX^7|Xx?0%LcoUoub3jZ$ zLZ?00=896yy8}Gc4wbr@W(EAj=HlcaW0=+Ln68t#YRwmeY{hpIgV@U!IlD8gzyc%I zo3)Ni0vzfDbtK9~t@)KN$#oX!+8v}J zfD)iPs#k@Z&5X=gGfbYj0^-aj)l1c4HQ<0Bz+^z@GCzMHquQNPOIPGWH|Hstx0mjM z)rSK|Tr=3++3-VIy#i>OZf_m96;*REIi@+${So|&fh)a>U%PgS{{ydw5Ljqzhz&`p zr!BYOu&abW^{c+4&~D97o-`E13;j~gC;PJhylXzFr&Jv*>d&M!zw#_^5Mc*q5VFvE z(wtUxUy(c^{x-H1$LfFl4f+U$skQ1=#G5BTrJY{&eiX)lZq* z7%rlYt#P)q;`KRm0Da@_=0#m82FLP+=9g#Ad3&J+1kP>cgE(}+Zl`BhjPZ*AM;f?| zLO6cdbjYa~bcFJz`1DEBS)^u~*At^>k4xj$%-HjD_vnYR2~(W|pS^#3pLm!ba%1Qlg?9fp z@!iF7x{k*gt;*U^hyk0{F#~F#wuZ+eY6u|E&+hVUIv8wM~ILpbOS^i$$|Mjeu z#&SzKuTzYV>XX0dvB$7pB&n|YQeLA%@)zK;wj|Pf&pZ2}a(!T}Ol=bq^fXKWpcD0> zfB(E^I&b~T%~)Z8Q!NO8SqS(9Fg>hUFXaj;2i+3Q$G%$ozR9)rMV2)Diz0xp{_0}^ zSog|iyIqwHJiT_2+y+Niv;P!D55h&U+nv>p<^4ghw9EK( z&)rtVxx!nlVp)94Kdv!i+PncX=NosL;U1}#e*9=2+S{I-y&fxtv%e%#CrMlRw18;A z@UjOc&$54eMaJ_;Jn^5o8QxWFm83^euA{2uwAquCj_(u@vRUwP(ZWV9pb51Md)BrTTgy8u+xQwXm)**EF)pOITURRe{? zcNw!|+3V?Ct)z_7QT3wiA&&wkJc52bIR&``U(xLTJsS>wI&kkk>%lCb_IV&hpO$PR z)zg8F;?ow&0_&5?^6>DS@>EL_Tw3(EpCZDuhMeJy&Gm;5`#&u5L`1s{dZm|wF(|3- z$>+Y!PJjPZtU^;ak=H!&%f=hNZaPZaLPxxAc>*_k{CwRp`3x9QE7?g=DZ<;0E=*cx zM%t8ce!zR^MRwdex5~gVN^X{TTCou?0(tKQwc%gfd|}+Q*!0T=pnF9>K)e;Z&!y%D zyhWQh$+Nc@;Mx2!f^@vCo1Gsqn68d2z$K;nS4Ur(dB{g%iYSTQPc+4F6$AQ=eHPm! zw=03U-1uvw-Y|HD`G*&YKYLVym|gw?f76QOxO~`<360#%@w^kck`GYnT92XmH6*EJ z^VaU3|Fd-(OOU|p^mL=2+`xyRCy;#>d|y7Ix|>J7ex+S1op@+Zs)1~Qm%q{%sFHte z?)kR)83){s7i|NrcA-grH+|B_A{u&Wl9M!qaWz`_v}zhGbiVw$fA&}w6s?kPNH1I& z+^}wM=N_3#ulLQ1Cl53q!T$|#++704KbcoL-s7>kR z>-|feAk~QZNJ6Ks{{s_2?7nQ&dFV5EIp=a2Tgnd9pjI2A4N@>bH&X!y@8o&~{=SMG zfHGbEVy7mp+K0+ttNw$HKk8jK{ygJX{or_W?SFrF{+G*B<UjFEdHT7bf_~=I9~?WpahX{m`)_oy$oOi!DMV!tm*J( z;gD{HN(3QBf)mIhpu>AWYw_M*A5MYh^mf5{`E$i+cd(6VfP1hfz=lp3I>bv5kCBwX zjuFrlKpY+f`d~j~m*AV2ie=ew{R{7$^^E#7me^$%kzpb2e29O*NmyI}4a z(0lO|j)EQ|A-(*dgH3}9t<~vD^VZYu^*ft-zW|-VYy6!~0QU=k^0|-i3C#hzBRHOW zC0zx-Y8`;$(W6JJjlI3f$o2D2SHI}jX+QsNCqS$Hai_H{z{*Tv=D&Wl@~5w@);}nh zGW`6bg{Utd(ewVbg;hKb(MQX_);|7Sqdy3Q4ghpWF{=U}&qp#wPCvR~3~}*;m@Hf% zJrE4jlF~^fkdvI9jxUWJ=afAQL(zPSVL{z1B-5V=Z2<=Tp|eR)DRUKQgcOVcUDv=v z)qyPlh`OS=C!bj)=l(Cl91`gXAbvg{?1%i+{2@}A3?+wmHa!~u4F`4Y`gaOTJoEDJ z!+-q0-2HW^Oik0H>(#%6QP#3A$n2?$nAt1q-EO9J%52PlK zdj{{{ES%KdV<@{+)4@o6~Ck?H{Pt`Z*YQ#aeSWHy=v)_}{&)RsY4(3po36jQ*0z zhacj2Cm=c3c(DOqf#AMrSqVhn3oAG=(GgW3@cvopPMFpLU=&e?9YDDbm(HS(moIt& z9e{T4sp}H}xn0o(CGd%i9hx*3pPnBYTez<^BkyCkheo@&tPan<2iL!uTY1Ffd$RK! z#(%%TV(+$^#g@P3UWS3vnvvp2U5b_B^3cqSoxqDnmSY|9@>2_d?>+njZ0XK8HxA15 z6o_v-_i@>~cT)|s>;YiyJKroXmCB<>zrWXhgjt86J%Ba{q(*>C1G#lDT?L~TFoIV4 zm75B9l{x_2<*&wF{;>Nqt^JMaAN_z~(CAN({PC>Setd3v{olSh_cwEm@)5k)@h2(p zKyv-)?8W!gEa&~%qqLy=@DWZ=f1|-&)tZA^D%0pVOpG6y@P~%!VN5`@Kv04U&`E`- zCIomf7@!qN@h^dqlJhggLJp@4e({Qn(QzW|0&%Cn-ri6RhwvNEt%7q}jng$SH9#Bf z8^}x7z+t(=S1BUyD|*r#!t}yd;|NL$`={b_PNv5VTdDqEY+Z)s{+Zmae>wX9!=o?M z7f-)}>);~n2W&Fi(tJtty$mmtCS^Vd{=vFP3zM&uH)({i{0vmF%4!cz{OK-uwl)ph zjX7=nnaYL)d|UtkKmbWZK~xa~I%)w1d%LOwCqZ1fm3ELD487jZft8$f4$w$vDP1IWE%as7UtP^ zRnn9GIx&=3!Y`|2tR&V$7S7Jg&u+&#d@?Xvlw^!v5rA!Dd(Z+@8f&UlgZHo;2m6w= z1>hFJy}_3D4Cu@55Q<(;rkIC+}VD|hXG zvzlL%v$40O=lnDgS0xC1}a1eAibJHM@FVxG$nU(2s`Csqte)Xa~!WJ{(rGc*S z-c$hErXlSCUZqt5_J%Qj+h0aZ$m%~q^&cGl>yE%wdDQ%m?=O7t&hgeyDuOM+Dl-e( z*-!oON!)hZlRZ#-8=t`N?|;DHuM1CqXbSX90rS}MnQ9B;k_WW;=@{zabAVSM7{>5Q z!jCxNi)tlj6@*M&X|i$l`=m*^)Zzl^Ta5cgEx>39&tX^*K=ojr19qsGgM6lTutQ)8 z8U-2yMvriepiEH$nb$&^VL>cZ!}P@2QYnV%rNYDsK0UqmAHM%vm1EA@|ANJqBcUKv zA^-95m+Djerr{C-Q-ne(d>OJcBrs0QB&8|E1(^un+hCT|aD;zq@glfXdQ3f(jHyg_ikWyKs$kl9|eQ)(oC(iT&s+p{rXP( z9;O1QHeiM7pPmL_r@);G=;4`aG#cDB@RgYg$oJLr>*nhWX@@_kRKDS9s(;VxA279l zb9Q?Dmv7Ada=KAEl=XOVKk2!vAFAoIZ^1bX^h&7*)W+@m82$e}49Q-o#w1OqAIpcEI*HMy&=fqyEC)PzX!q_{{nT+&I<0KLIS z+dFUs)zmu&(ho%Hf%moy{{SO&81}Gf&`6u{rK0&>R~DO<*@rv5>t8*=nr~-Gpy>ek zXLr{?P6bd4fNAOBtKcB$z?!i1D$SLmef^g^V8EQh3VLFF3VK1sR;qHQhwyccVmBt^Fhy$D_(I4OyhE!I`3jhV4*k#_rOPS z58T%wgQdfO(*PByAn$9R0PH)ai6SDGAhkRyUcSVb4>M^DQxL?35zU8*gAnm;>bBlUeVE4rn=YfhyV=h6y zP_GoG7vU=KU+!#wxz$lz6`(7~Ju|F-TonLkbR)f201N^bj~*SuRlP|!B)?JTZ*&KM zzW$#+eOlu#ADDot!Q!$Su=+Quf4$b9odKw7>i_=T`L{kiHTBbKxtO`*OBGA~7U1W< zws<)G>&?3hJI}q1-{JQgsQtOEtQ9`?4URV;(w9Pl3t$4lu&_)>O$G5;3L_V`fVz z!el5p>i>e8sh?4cQx|ndEPtNHL->GM9Zuwin6iyNu2Td<8;7_-40gfbTJjM27^xf2(47DYd8XHvaUP$U2fw}FehBRo+Iigx(3XS<>uWO=z*PZ-UT?SqEyKxg_+A0ui5*8jQL-v{&#Qc(SN13 z4Z}Z-JoE>{O5S~pbVo7ak%~t7xb(Kn$3%1c*Eukm;!9}xoRdRjg5N%Q`PnTpxvZSd zc(OEptV74`$YW|}fax4+0ggacpPPqIh+-OEd=#yqHrqGVVAR&efL@-IK%A7NOer+7 zqcdp6g~%Z3)>j5fo}3|H2BAJWZ5Rt++uwIFfX@y>VatGj{!JK$qCC zZu*l)&V#__p_x%>I+-_Ka`UA)!!sbKm3#navZkK%VaqTGq-N;R)()lxs_M}65|#*B zGtef&?IxuPEcUa0qKOz0O-rhIgyuVe9RGvv~P)3nl zS`vN%OduE+#+n$1XT?~_SrawoY=kR7a^*#&^Qo1qL%8&XtI+K)74LQ8!EaH@_oz`> zfH$&L%tOKMpOFDMtq(~6m&q|7mguPlR%OAP zKY^%aEz z-k81ogV(1294~e9gkYdPYfFdKB6j(!%q<6EAoGyxlUmpAv?>L^wP)B{@wd*XNjOxsl|&;-n?_C09vcI;jP zF;!HaZbkaP|rqVXuG@Rs{@U6QJIE@4exT8#e?) zgwz5aNWwR<15kvIMQ@pJ9B@zGF3T+ zJb~LAud^b2N6)|gv1*>U0M)3DcuMzavA1oO$=^>SSunpwg7>ECCMS|Grsffz`t_TB4n?uG}>zA8ry;~>GtNFM7L>24y{ou9L|C7JRGLie( z=8b>>YNep%N3C-8f=`$GNyw|n`)>m8geZr6YC?oNaWX8mgme(p?P0%won3W!dRfiZlfA$jikuSG z4uYONQr+i|b!Q+VfPaYrW~)}5o2eIe|MB|H&F-+!M-(ei{}46?f}9uNw!y;&w+%)* z9NDo0@Qu;}_+2Bvh%Yl#Tw7bKz<8qEtLrC7^{-aia0IERIPgF2yD1 z&KLW2@}gt{e({Qn7YSr4wIMV@J8Ez9GiU;wy~CxSMQQ+M>c=tCXkdN1G?ybrK6G4k zSxiPf`^P)bvZBf~t{OaXHO$Xm)^ij#}LRUI?U5u9{wsNdZCBlhjsOU&#&_6U@* zq09W$?`n6!iQqtF84uspqs`TCi=R9RS-Y+61r-V_U{Hjcpsqe4_^4 z-y~rQXU?3dz+$q>g_NkcYPk#(EldNTBDH^iRH`2JqZ0M`4u1{lJ++;I4i*S>C?-VErC)v%BLHQ=jgv&n1lNN9W3+W z{gEFV9k~6y{cF`3Zdo?{N#>i(_WQcmWJdp{Hx=w* zv3G?oR^{gxXD*&ttX;(ov3F$9g4fqhqVazN8$MfS32@`PYVXDGuw&FCRd3fD??avo@4tg;# z-|DnaPo>nvUh>C~A4Y*(s6LTnpJj^4AgHHYqWko6WsAv`9l;eA1K4OZt2FH56pj4g z=$}^MPj;SS*YH#ZkRYPM?(OO1++JZj|1wO;xbL<5&GFXzmq%f^`Cm_Vw z%M}kuaA97dqI=Z<%!og5$ov7o$=lRlT*`P%M5YLUsSd)9)5G$3<$2UfImLOW01+LQF&)PgDOQRz+>)N4 zXq>@H&Qkuw<-r0T6)ScPdZO=&499JQXPQIxVC$j!{e#cpv`ark)=H?%EvdOTKT;L6 z8CgdYn+1LUWb6A^)~Z}irrRdB6X10SIDlna#!dj+HnwqW>wuS5UX~d9O8=&G07@Gh z8{g~FDqaigDo-y#VC35GI7oy&gim!fb7sQquNKz@?i_$3bM{QUukV zeys(78h>x|b37~d4~F@E8G7~dJl3YKX+QPsBuwrYzf9>eWYEklze6u~wsZl#6xJo2 zs=?*&9JDM)5uYKum(vN{-F%?#Z$8qa|FU-C6#*n(N_j|eWFo~%ad~Ja7BVIBAo%B@ znIcxsXmV^q;ae?t)hF2Y`QGM3eEu_@P<&XM$6r&^=bz8tT6ND%pJ$h6x`-AtS8kYcK35D_ar+xgR zGQCv*Py|-LcY5l?UtgL1%jtS)#rjy`4mDPfYj?lp>A83XhcXZG(f;&-VA9?76GWsOEP#`^(Y-)l>#R&vxMN-0-Ze1o+ zX&9G&<#5X4mo7Iq3F^ZJun%uDwblt$EF0$!={!veeF6+eJ-sBbP=te_u%(%SiO=Cu zgs;RztUv)x0mNq!28XYFlsrTV@cIY!f2Uj28~@BTUW4_%``HpO*z0%HKi>W=-2Ohs zraxsR?*LFr0RvqaDK0NfDP1W}3yVMdc)<*b&{@i#xBxZ~43X2A)WiTZLNAbFf{t$h zxN*Y@A2{k)$L7|sO2FRi>1~72UhF-%rTW_&hE(DiUSTV9jnd4$&Hk6yp6y|t!M6jT zT>vsUs{#TZ0`SBEFMdLL`o%YY1uq2EB(^7I-sL3lJ6qn@d#>!$565_iBJJ z9p@_knU2ewlrLXg2Fu$ZZz!2CTw1MVS^?cw$lb$9c=s#mc* ztZZcC*@O+TwDY8KOb` zY0eUsMpSEX`qQb^=

){6j~;8}SE6|3&y#`islc=YD*C>SxVL$v#Pgp)q&*n}6f` zs#wcdAqXR(y{%6%_xl@+{xJ_+&wEc&@QjWnNuK(An7AguRKJ7{u@W3GiRCf8B+y8kR z1u>JiIslsOA=AYA4)iiL00r#!r$_%?$MCN*a4aT00}51LPyPw4`)^lR_hsnoDMvkqD!>B(Ms<;(cuO+l4ns??Yt>Th3HZ(-^P- zgEg*OcaAW96DvI@e|q*uQ_A~g<5-8IVFh#l$MMn5n2yn(TO;uZYX2AND~$RY82zVv z{gc+C6leHP`uwW!A4AUM2Ru-LQkv;FY5^Lx0akK>3!cbra*;2y15kYa z{JCEChk1Xk{>L^7Ms4DqQB+o51^)i4zqm4UX?>x374t4uxoN!7I(Zp}f2UBjRw&5B zYt+tH_}Je~SoRmKX!C_hJ4f;EHE(a|7KbhpGQ~0^U>Fs~C2In*c*W_YFmw6E*e1Z! z>c_+{ju^-Eq?5eW->hsO>_IiXV8LGH@~&|dn?Wd$(V;r|6u%ADo$zZf9F05 zh=3Ue6YBHF*WnCiTO0q`ZT~D~4pkCy608&#BrYgd5N-`i`AczznWXH*O6dl0ruc?c z?3{;pEVGtqx{hx>+;xBQ;EPn}K%tzN4{RMjgUy02XBq^uO**w$z52`7XD*?^q6V9t z05h2N+B3Fsoa$zq$7O+R1A)tGq(Wj%^5SJN=H1luAU%xwIY(mV{#kL+A3g)+i>uYe z4^Ol{Y*b1aZv0T|SjsVT;cZpKp3hka=l(lef5hmYZeSsn^*OU9X0eLUme7)5;%v3n zITS6WBf$kQfnbQ8_yZ8mm3##zqd{n7C(n|vSdw1X*=pGXJg_0d* zj8v%w;NAjZp8!668Kp2PS%Ur140HHqUC~=g4|OG#H(%Vrme9}w2*fL5BcIvJ@2V== zl&qs(D$RVj-u&>wq3QzEf2Q#_XWgy^+d8&=FMGGZm(>9%EiW%?#|VRZy^ML0a&+{M z%GPQWo*U(2{TG*~udZRq1-{W%nVl^j-%_<@?CqX)V2IJ(y{`Iucd-{d#uqRW;zMEo z5hKBoPQpJ-5BdMHcrjhVD=t&~`A>c+;#CxXajY0C+?p65Yp-z+XeDP&)FecjfPfmM zT1OK!+C&HOGpq=NH*eex$&b?jbP7Zl74!)Z&IUPUWD;@7qv`$8jLSoM0-D~9$qIm0 z;5p7hn{>S|3*3IpHcnwhMRsT2%ZK&e*Pq{2PutJXc_>4JVEts6Y&bh|1|m{|lg1e~ zq?_l+dXVza%ENoo<&V%~u~Lt`a{7d*1!_SH&>QZmKivOJwYzOUF*StAyw#&>`qDdS z9|8ub33xna#lv&uv%k19{YIl!{V4qM&0%Y5iIC4=7&>!w$U-DbnCt!e4Xqvos8Pal@_~dHeA5BBsKWETO z7Q)XS3pw;`*=YRN>y_Zg{T$Z+W9#lrTONlAKj@!7xuO2`(Wh#v0Y4z<0EGEulqDo< z9&9LM!bMn$1VA8)SP5Q=Go+>Ek>U=DZh*g}8jKjJXP*c|d>1$O`mph-sN?f%=qR%7 zwIAg=3{asl)>{VmoXx_La)5pTQ%+N*a`6Rr3%oTL70|r-`vh>m0CTNZ1b}J-egXDI zqv6iZ4xajqk5>}YeZ-}Hmi9r@mbI|HzFzLa9b&)PEa{#QdPSTUF})+Vr)1_$DsLRE zt-OA?_I4#}^pDn?Mt`l77okis#o~h$c$fl`jYfSK|6RlPyo0%3G}8VvB765dTEUE7 zWF(M+VRTATgn)Y~1&48=vU!BV7%w^$AVz|7Gv$DW*mxH?2w0)kM30-KY}k$pyFqqU zcl#O)MV}#W^79lR>IShR87$YUr5R`eY+9Gk3TMa#(!x(#KYTau!rkj#_5}Au840ypZ;vEhg}A1RwO1% zkd-TMdWMX-g>dMZkGheDqyOR1*<6V$Dx?P;|9t-BI&25_^wK|RzRBS->SuC{QYcCJ zOL1hA2b&^RELuvFxIEYxqtu8R#@eM~Pu+Na2ith>rs6^g&;m4$p2A)MXVJ{qn@(r} zs&5@_z61NUY?(^>$ufwTpHR=h%60Jf3fDJ^tJym2nf0&qr5)qyE=g0AzJE09ZnSotA1pzc~HYVzYbRlZ9r1B!hF1J%tAdqqtOK=QShkM{Iyn;as5E_nnd4eS{ zk@N|0$n^=}WHTwr=X4p8@!?n_fgekH`=ja8GNBB5aUo2`l(SEdS$XuJWTB%^uB4Ev z|C#sE_EU8oOT3y@di^WLo+(W{^ha7hQXGl<bdZB`yy( zLHxuhm!_$rL<}RPyd66LY5^YaJk}dUp;6|CBJ)>*Ex-&`1eB)e?9%%hD8gDcB^|SzJ8>s~V?rYNmd|e#?-WhHApEUQ+iV5_PN~2=2^zM4? z(51tTH!=FR`(cGXr*-0-w*Chl(J|;fgZlrjHvEI~z&#`nj|5}rjd>2S2wkKQ91lY^ z*m#E|V*nEf=I6Js%n^1HTEryd%J3pqEVkh?`ZH*b0wV@~G-8JzSuJxK;28Q0rHD^} zSSB|jnSUDk<;17glP8Z~1zuEoz^6w=$pCBrTd@4+N($*Q81~g?82xu}Z>avKE7$0e zOQdLKeI2Kn2upc}_K!`b5Rc6xXC7>vQ*z9!L6bWL_JB*ZojpHNdL zFW^&QFK4+_s9io(dF#CswL@srLTwz#>T5j+4%h-f8^AW1t&*L1f?VT7eO(;@XWhSW z?tivcZ2b7#%+-ZP@fZy#ZQZg8c5RwI`-U_6=Nq2+mecd!bpUr%h3bFS0IOR6@W%_A zxX4*_UknlC%{+|Ifitb#wWT}bcm&cC!%|Eb$IYtDSll_A;z#47*ThBRqSuBN&Z*T( z!w$!|!_-*(EWx4ZG zgjc&EIs#E}(zPa#KsX5-k287`U$Fhr^XWu+k#00Da4jlp01s;1_7{tJQDErtzQ6V?*FW+tsKLR;~jGka}UgQ;5-_3;rQnP9EP_yz+^BEl{l>m9Rs1`xVH^0fOZVzOBV|9`3oHN z@&eYfAJxWyx=jqEeZ9eWnfA{=gJz^IZ2VX^T>D=`ea%4qAA43)GWWIPpWAAqvjImh zrO>A!C5vuD($ccyGs+wyAjL{?Bre5DaW9)@9{$9-M~-L9WC@<>7^s03rrq21rvZY1 zv@qJ5#^K|txqc3|0G+}oob#wrVTU%S& z}O$0 zn);BuT*OFmF4^EIlwC?kiVHAu`S{gk#`o!U?_i}kcie^1`G~*Rzbrl`o%~EV?FZ`v$FR4F(c6|PVTZ8& zA5t0;+@vtlQhlBLB)ldqH+W8jtxtqXChihgP;d{t3HQJw3|9pQrvav_Yw&8fgbo0^ zKVR<==jWGca*|}wj0+KCjU7_8`(*l0C>HqrL#B*;tj%lBZmZ{eFVs}M2+QsaIU-z> z$>*aHA(?V1r76Xc%|T%E&`c?6ESfZ>bfvfeljNHi0Hg;i7>AciL-iC>NV_7}z&@?| z>M?8-bO|k)y%~iqK=s0E{q?tw*H)so0Bi$6vB<`sZ6mIWY%A#(0P*~dQ6avJSs}aR zS-G>*i)(9Z&gfs@^S_BTlOMk}bpbu5qbRkt;FXyLHT~LEXTu*p0D|8LJ-h*(xeVJ_ z))n;-W-E+^xFsnp6N;0GO~HgjW3^bT#!b({kZ2gA=jy{zF${CX4`zyGjKBhzKrjMw zFS9BtIafRujI3g13ZhB+Rs?t>EASgpg<~MtkqkOd<1ABRYUNoqQ#+2%CyW8Dj)9U0 z$mC4QY2xBFD$%A09$7H(X=i9w0MyF1P#z~gNB@0p{DY2CtGZ&uc95QiE)eYockt2v z;^|G?XE^@h*W7v}*CXYRAH?Q4{8|XsNH{E|mn>&;?!4G!D&bfuO)1V$Cth;o!MRvT z^?T2ec@Re!VvjK8q|}SO4fVXe={}%-y7R!g*MTRU_q9~7tC{m}Dz-(o0}>YInx$hO zooQaEXZQsO?h(MY6Lb%>jXqG~-0PUT9eI}jzR!Pu)bI3q^xXfMh05HO!&MlmpOtV&@Q=lF7to;H{RPvLc=`bmj40F{(&;p!1k2b~L`DB~+ z=HdFAC(*{awgA+CvmNw)&;oFe0PP`{Z6JgSa?0i~(!SPl_{mrySRg5aVbhJX)Mm&*YOvHb%1i)e#r3!qm7Sn8f_+VWI+ z9V-IPvaNG%0ceIEUJ-yclD2YeGwW~;#5NR|18b)bj4*`eJVp^8I?ivD+_`@}#}VlD zu<)3;E0vDSm8ae~-gvXh^-{J2bN|f~=T&v_unm=%Mq`iRUaCbw`fus{alA%nA zJSK-pAs-WCQZmK)1s7I0sS;jsI>|8sT7h5~o0<@YiLO8^lUyc1b1D`wR}C$|pz{z* z0&gJ>A6vnJU9GimdxiI3ZxbxYlMIo`nVdH*_8@4c@e0S&_KM4&XB#K6cS4dY?=aq6 zJ>7k#mv9-kzfOFfavTIU4^2~&NuH(rrMOAT7Nm8+{H?EKm^a6QWoU(;wKw1wfUdst z9knG)Tb;rlG#MLKRm+9eJ4Y&SvaLg#r`tXbgx#Ok1Q=TYtqnli$Tk$x9GDj1pgI7> zqeqXHTUgT2!`#32`e*U^5C7_wAD*5*wKh|Et(dXxR~a6drcPbLJS;~4yvaF!^e9{` zwcyAFiXQgXLYbZRA^d10JqXzd*@yvjGDj8`Oh`0=Oxdj;D3VT?R&pmGj0uSnx`@_s z^f~}eB^j3~kjo89FoXi94ISbX{Fqch0+50#qXSSZVo4y~1H<*KECo)`|bo{eR$3Gat zISM_)CkD4f#LJvcC5}xdoChbt5+lJGX{1;wT`A7+H#L}bHu$Wwlz#+A_NfQ4&cXL^ zIE03-T*n)VcyA<+^sFKvy;QBM=`*hj_6R5x56{+L`@yN{lWg-qouhmG3v>iLzW{7I z*@m($1@1uF>H{H4VLP2psp~ra;jTw0pc(zMFy1x8X!u(noNT;aFBdcXE5aA^p>=27 zf36n-TyPXHw^(Vet6rywksH@^k9+tJPdWt&hPkD6JmaTR<5(AWKtU!Hv(*>Yx)k4vzBnpr%9 z=^Xv{vGGr)b$1v{Y3Y$f2(!UvMJ08Q)@kfjA^R0}iTIazys zwN=47SKSV3TL3p~v;x$eYg>R`t5srKiuCCk{bsx;{7i042r z$Lswt?!Du+BkPNmD_Biom4_afrqI(W)#>v;|51QvvHI*)^w^H8-OZuu?&0f`aDVyu zW{T6l^u`#g0fLlF*e#2>9OKMK zBz)|jrj(vG{u@>G+J7#SPIzEraUA`#@qgNWhNXWc7!8KG#jj#7L5!xuH=Hv)SN7Mz z$xECBE5%Vt2|ZJbQo57I<(1ROOA|cXKZBE;1NDTPk#;Zlx&^hdTU1A9*VOryQ!pe= z(zcu2;pZcG#XSP1&t6q!v{AMLeTCBcLhZ^2Cu(bK`+(KIK-;L>Nw%4^1u*UCnKNf7 znEj(Ea&Rtod!w~03Z zqbIESZyY&=YCt`hZ&c26xjL_!3*SXYZB^|)hf|l7PJq0w&BKv!wl-!_JWCjji(aQ- z$Y8Q7Ktes8?*25KO0lM2? z!nxE&xUwu)O&9}m#7osT-U}cn@v|@#B*pKxAX9D#@2Y>W=yd&CE6?Zh{I}cNQ=dP* zfp>Ta$3LZs)L!@w#2cabJz_b+x%Pi8r76Ybm5+2KNBBOb=aAykDWs=J%EsI-F7lr7 z4!64_^<-PA+4`b-@7Ps5gRnobet1Aje``TDio+ZfH2~BEI7hmC&01mpPtLT^=3&_j z+Q3NLsQu)aHj`(zrMtVk2ciX-bO(TLf6H9@*K0I%4+i@ldLw^Sj1Kc`!tWoiubo+{ zT*4Bbpzg(~!@%ESrHau%M(<6zkx(GJAB3Sst%c1TmVbnX=7`#PHc)$*4!{nr7Oi5n&~C+ zQ{poEY0*#~{?WW?*HZp@c<05Y$rg+c$mxDi*cWI+?f+z}pk}Iz>f_TNsFU+YVMh|c z21&%iE+PGe@)Py0wCCQ0ZyM_=b}m<~o>{J4e)o9&FdF}m768<|_L6O<)&ig{Wt+;j z73oqTeZefDNp}ErPi1N_;2y`N8Z`jbsyE_iPY1G?U$I#)RX;q{JU3G>W}5WV>c4U1 zG#YJW57z%UVTe#|oKUTmAE{#HBs2j-)!yvmLr!ARLt5V!oFysBO?H1R1T9H%UW}1u z2v@Xj68R>1KadJTQm(;IgiDszkCn(R!MGGNp~--9jXovzpau8>T7WH4CD6`ws!n6T z1w8_ed`J8ujvbO#a2&@5HhzP~79=I3Q@iQZ`RD$bHsTk^OfR~bK7H+o`YzdokBSEAY_%&B+kLo>}Cr#yKMaD z>nrNxQy-|)3&-&Mp(%_OPjn5Ci*xp-IiqUJ+KYX-_>rqww0Yk<**wQK5J_x@b-QS^ z0XXZnlWi#5QnsnC7C>6)2*>2hNp=7V#_><5UPtEzy_bqV_Yd}7&xXAoIzu?QP@27R zxOz2f(;trhTk988Wp**S6ywC=hF2TM)b#3~s%q=1YHwGe4Zv=1Pzz~oQGlkS36Rvg z1*4Pr$Aa;AN^llBUXp|knR*#K3F3h`M%-bJ5sT9bL-NQip%tbczjFCyvW@dHO9FeH zd)Q+74oLHBkbSW6*T#TY{>G8;WRJL+&Zs;#Ge)!C+6 zH~y;2YTbgeBt<2YU0Vo-l0p|Lq{qV?Tql5HN@PkYPAFPRM}muEDmCm6P-w$3(C6YM zfkk|DX5ksIh+RSl+L>USZm0;kFD6Ydw*b}*+8y$Up8sfg#hp^Kj~>=&U&Gd|JH2h} zu2|m3)3Lw0iGLZgWe+2y{G~Wj&w~w1lYaHGX-fIqaa!dM8{NlSa30mIt1E{ts-L{} zkvcka$Qk*kS3vHR0xa3NKY+kJuv%(Xj(u>Vd4g>r7zMQe)S7#Cb8J(o1>pJV)29<{ z1Si=6D4_#TZenE5c?&rHiCX@LdN?!9V(tC)=9OBpFlAIIiD!H$+4xuHutdo3Xh{cJ zf*Xj{+3?HIn0p7>fS$)wDmfj^G-cQ3eYp zlqBVs!A^f@!nD#m0nr;4z0Tsr^f0g3GoVQV6Irzo$4M|?M>?5D7-Mz`?CspZlE6oq zxg7wOzSX$&ZB;u3a-K8N4bv79OM&f=p1E6b;wELhGd^y5+utgdM9$RLL0(qojrNvS z|JSgOM>TQjU!L;HcsgZ|(={az*G(K3P7hv5`M)YOP1#J%*v&; zuJd0~-&=oQeSGpgwb-1)XIM&GBBzh3&coy9YnSm@qph}7L#wD?4=Zo&1P|gRR9p)`!Ox}8^O)td#786)@I75 z(P46HDOrqiYZ{*a&OxPuPEykSN{UM+WsNOh{b#L((MWAc?QQ%X4qkq%wx2#zwJBH{ zPhovxz}SfM-@LEchXqBsb+QHHF_2(9uqEIz-6w|G!?gDIE=kHaDGX&7(#nLn08|B+ z1a`4DomzlO^9VjJ*{>Fj0l7cGR`({f0GJP_hssyt2;cj>B5Tiou>N0~hUY(Yz9k3W zxN9$Ns|{@0GS@Oo|75iM~ao=^3WtUUZ0FjKJsBX z*Wbpdf1?d9!xs{VJ5ysi$-EW_y(-c1(ifDRe~PMx}-Hb42Fs<)B8VHlRLmX6Mp zPQQD+vHJghy3;O{%kV?&x0S&*l;Hu|)`8<0aAE`ZN%bU3*tw`$-P^17ip45+G^$|! z9}WPA`Um0BiE(}?U==-|#=m`I`mKwrwfC`oXSxh%Rhq|MQ?pmTgARb*vT`!_650T$ zBP)$HxOzQ|k20nMcHkbe)6+XXvJ>Dmba^xZmM2XoS<<~i5hKAdL&A%aC%fh;&5$gU zuQka-Cz+NO$CJswN)F}WmrTKr1+7eSK7boc4X~YUzdKYlIGZY#>F2|K&=`;1B*)+-F4h`q@4+qAeQI|Sh7|#gc4u_|pYC*S z4^)AZfwTx3LObD|(J>gJO&t!fNlT;G8%`}Q4!5?pn7;1^Y$81g7$$J-e`z>1rTzXx zD(CE4{j>K1VcF1g*T2&7`O@^ILzT;!OaI_vu?4^XrJCKj0sy%{M!)Dz^x){NLIc6& zAFI~l58<(GRc$@Pj!_!}{gF4-p6BsR6;MBX(kD=YlVDP%86!c$PlA!KmeP^na$p2d zHr&(#4114NclRbnULaZg{n7M@hXPWXQXGjN1U3)N zPysC$q?t~aqyBAJ_&>s~zTI9!U0S)IesTVX>gu8MFf_F|kIQ)eECQt_(ODgL2`ts@ z_AP7!FCVU4J~~^PM%%~-Tep>No2j+v7)Y0lXF#^GY-`!(rZUfwkUsjB6DibcwF;If zaEM;TG(ffBjQ+8L!5{S_jZP1$*a@lnvx`&bzI&qiF*ZlA+!bV4Jf!B|{vka7Wsjy3 z#Z7-!65-)UjPl_*uv~+C$i@-a0u-PPcmcbB4n}F{;i2Z79R;Zk$U5u~u0tT3io->M zOTi?Hk^Je(Dp5E+%#V#Bf8iq*5l+@u#AM+TFo{LTqCef4ciS^>Fv0T4>ea`HuknBDiGUB9NO^iX|=?8;_00B+F@H6CY-inDd-2XPi(T zIi*-Be<{vL9p+DsV;BAH=a}o?+AFE$<{|ab`ny`?ztEh;J2sKF(l8gE(MDhZyL0n% z)!$Bc5{B<&p&Dv1*G`>swe4nVI zt<(=;rNGC~2>b-4Iia?n7hoUI$DFTmASCGo*hO`|C(;)o`~oCXmSC7uic99=$4cl( zFg`_lNJ48;7)p{&i%SBljUhS#4^(gaj`-P|s;#MJWl1{)@~2PirGJ^J@mGpY$mDY2o%Q!5+lJp z*htoWUy`?!zZAD`p;8Dq&bf@b|KSF#M20POb@j6P`MDop^nX@0GM3_{5T00cd1_X* zpaszL#}=wp?1c61vD#&{jp*H$bX&p*Em`C4)=w8E_oo7S??4KqJt`e((crAn4l%q!!67heZe` z>0}GWBQM1y;20H(4qbR0;(_GPTO8-a9IPgQJY2bB&-{asl?iRxud;lEU#K#bbh^(ceKAzSkF9 zudDgSYg+peOiv19=2QLiz2B=ln|CqyUrDh32TwcO09h$eiX-WCY&eBi;h2D6k)RZ3 zvZX$d29WbC<(~&9!4f0Eaq}KW-Oo{fw^vigXHUSw|2_4_;fv^8PUrCIC#V{kNHIbM z?ihw!vvcD!HSDJE7|I=R;TNEM?RodJ>rc8{#bVL30RT}QrbYm5EA0S=g?fF64#2S8 z#t0Nu5o4Sq!u>ks$PtDXuvKBHyuDrA#@s%=7WL@)4|5rA561LT^cnkhRNg<{JUQ2Z zBYxX~mZP?O6u-mzlQ(Al$2pkyWL$#KN|Y)K*h}DjbOcUgrNHmtGvG6P@LymB0d|CH zVYL8Pbc*O3Vd7%?F%pcA&K;th9*fXL3MmPOSv{hfj-Cz(N5wE2nD{4_F#+{;V!&SS zyO1CTqRM!q$~7z@ZQs(n1Xi0=bK{_hDbGa_orLN7F;(53!IHq|ppn)um)5`LDEuR- zyJS-7MM|bg^?#{2g_RF*zJeDeJ-^TI8La*}`mdl~YkHMLGVSOy=Tk@urO`;jO5*a| z7b#YXlgMWtN=wkB>k8*xUA(h6)kSe-t{jw(;nEb^7%~)hqD)XPq3S#Xr^mC2r1u zgG+$Szp;f4X5_P#{CovbsbOs-$Z3J)AE=o_f1xVyB)GTTP@7M%uK;!#9O6TlP2ch~ zF-a#|FsafdC3pnmi6IuDi#S%tNHGx{E={#NXR7cVHC{MA2^WovUb}S2BgV&ICHy29 z(zD17{+tHD44vK|U^L{)9`^_q)Wo^xMg?n!VGPJwz5%~-sRtNL^w=LgQ>3s+ahiJR zAIio}kXkSRG`%5{KdHnV{oiXuT*ty)8!Zg4I>_BT@#fGV^+SRq{m9^RGl-q8a_S2gRKpR^gR;%7N!So5h zHaNyKN5pq2Z<=V39wa%*c#;>u>@GaHBP80MUP-)PAfWspB zFBuylk`az@Ss0U7iZgik91?ttlx`u8hHF^&4jwX$Dy?=U<;y{Wp zP5L>&j3CN*64RW?t9qg|c6)8@_=mO?-1RT>&;-JK)ALAiq(H)xKBWAmxIFUZp_vDp zM+ONNEd@Rpoaf)#8^OXKT2}atxO(W6dj0S@wKBB`n~?o9VG=6I;Azx3(B?JUUDyN`A3uJ~wsq{Aw4d55 zaC3qd)De5|P~!{|Bk`<51oLtgPj0#Or$el z$gvu8A6ya8RJG}IdbL1j=PPssexr7t-&f_`J~{#g7!hK9cWOV)a_@{hUVq65nkJ-$ zR$3MlAIj=6HmM2cP=QBPL!tci(olWP2M%f~5!z^$Pj0JQ)+a01f7 zR>9>O_pmT^5ug&t!*uQqP%kg5y}qOJW?iKpS!GDinVhnJdMr*@WakRs0mt)SX->^H zP5~1}1?BOpWTb9wK2Q&^>)&*vj1CcBAU`#jCluB~NXug6$f7I7g(UGV(y6~pIirO#EpG6GL1z59RX}$`XO~3c%#YthDksQt? z0h@wG&U$V;7#F4-zmo7`t}rgSVGCp8yyA3{F@absNo%4@M1o0%!WTA1x_f#WVA#i| zZ@=2Eq$n(G+UHn5!CA|GsjYp0hgr;kjRTlAL$a=Hz5 z+fv=GQUl<&wYu$P8|>mzxZ9)0)c_Q*H*sl*jS03JjS@@}OK7l5SfCgj^|Ju_H-Ig` zd&in<%gxeJ-16kR?#fxiw!gLIBS2YUp;84q0k+XaDANI5(4xCkrJ>+=U?_M74ZtUG z5Bmw048DM)m;sChix?3mX#`Ap`Gh1KOrDq~z``prDMhA`nE5c??TuxNMTEHc7ZMyW zraXSeoFQHD8F>s7UnVT(f#wG`Av<^A80ZcAy<|J?NtQ)w`Y3`--pCt3&rPFI4F zHq1pQh5kr!CQ~whL&c!{a~6Mtd|5cdKkIBtD3Q~zBR2ePc+%WNtUavHZw)o30zl6Rd@|vV_@)O4H08sr8=l`W4)-7u5e`jt&cK|@% zvjt#y8hajJTB)39Rtj@I>v*VuiGune%&9jqOCWi6;v|r5f;Iw%e(+|RxQw&$A5cbT zpf+_Doq#_$D+bydup8*3b5KG@0Ns@sZAPRN-jWm-M*_BBEJ<-*jFDtWz{H|r5y|XC z{32OXsx`H~BiVCZq8QZ%b|2eqICn=!b4hb zLUQBOZ-6wbni4sqf2F1>heF1G0cb4P!|4Covs-ZcyQ7w;)9Or6UM++G7n2|>A`i_t z*3?ZFm;I;5c_-79;!N(;7s&u}opr+x13!-XyZs^@`7Eh(%cs?O{N}KvFE-C_*i-Cp z>Jhog<<^X9tesHpyVumHA21A#$loj%<}NIiPfS-zU$Hva-~&=Z-@s_qwWghI?f{zi zK7VM7fysLlHD~eXB`7ENBo4a%g=L~=13+ORG&>d)O3z&!nJG=3KU6u-`HLW(Xt-2w zs>ZRi=rUMg(QL76b^^@5SmHPlyqV^gGe2iMDvhI9G4Mk*d-$(ZZRR~p2h6JNCzvBP zI}XMcaaf*goy0#Dj3=W6XQAUIN$8NNm%)=D9!S6-%2cm&o`5wz7(3Sb0gL?@AH!G5 z&*0O}VLHV!YyqGJ=w8SLTtp%N(v_E>hmwGCL z#(yYNr6lv{`C@NNeev|V9{s~fibYI;eENYRPJq=I363I3amiSU6+d34oKoJDIuABp zN)y9|f44K#s{UuN?4LsC_j@PaSATKw$LfRQZ|WWUN@xpGzva%y!g(1D(Qnc@AYTD4 zK3kXuU>j#UiYV}fLyhx?XG>fSz=n`7fEieucDCrQ1}OJitrDjJ*e2WPrlpOe0Vr&2 zZ0Mc;Xo<-Ae;yE)g6fe!&-gjQLrZXBrLnR!RnAoZSLRn$6+hh?$i@`|>AcaLJIwwB~JVZZwA+LC{s&JRUJ?;|tnKlyDTZBeQhOUh<;JoVe zVMt1!03bwKvSZ%`jIbG>9`7gB|CQ1V=Kt40H@g&AK&h@hzoj-iTiEpv#(!}Y*?97e z`QApDMK1HyO&q&_k>WHX0=kz{9N~Ge$=s4-{r84ip*?rRzX#ip`TC+d3(NjXt7qUK zYBoONcM1C6@&pe1ugnCZ6O4j<)ultKx`^$+ZLWcF1D2;s$Ic%ruYC2S`^wm{>p%NeeJ0p!v@ zuZQG6FOu&@=AAMR4}tsc42&%sIAerYX|AhseGQHOC8&ovHSjs+iMP=az)o^lK3J*< zIs*Du^AC@pKu%2fuLNg#c0x&^i!dASN{V3yU-oz>fOL5H80R|rSIW<&lM0vclVDu= z0ENX4?q?UBy|1uS;2Y=wE=PrrT~|xfP<@`p1~?D2PXKrc(=}i?$1=ns3^J?UVi{8+ z#-pdz|Je9v0n;C~vdpFTc4tR@@$4qn{9_w#p&_vUfygK?ZD@2+GH?zEb&-W*b&;S1 zXRti`coQ-;%v5oCJglLjBU1ht4pOWXM|LtSY{68A4L^43>p;~%Q=5n9K1bER)WlAG zLd~z?W=iB0*d#C_mgu2gT7U-bEo^PSd;2TQjd998`DnmR{)g-JbN}s+yI-M5J-1!u zG=Oenc}-(LbLL7sw#lHzQU_}xnL!|SoDP7t{;xPz|JwS$?~eXK*K`6Xj5Z29zEGYz zIafPfqAuKWl$$LWO2Ex7>;Pg1i!{L-%Fe*PI{`+>F=bG1UDdc0(VLGv79TC6; zg2~vdSQ!DcKfun$W7WehfwT$9(gI+EFg1e_^P`>L!870%76g%(^JY7tEZM#p>3tgi zsfM%mU%SXO4{CBL@Ig~|Hy@(hk5#i4-1X1on?Sj8k&@lx=rcTyloTsoD+j^<>!(S- zR=VMby1xxq(6hBUb#djSy1e?DV#8md%Upfrx;b7;m-sEuN6O`Yu%{y0w#FI;f6XbY z7JzN#`h5NLF|3@s`K;f;cEC=1iiV$^07$7d?pzH(I{>c43#fv7dj%siH9+u-@!gy>4`^sYu8ODOXMj+*>_TK4~^q2q= zTmr__yO-nzVjRK|5}c3mw7z~+m|W^rOuz)BS6TkE7ULtKL(&0S37niL_<^WlRd2Zi zFOh%L{vxZH2Oag<(`#xl>Y@V>oGT?Jo2M^?0IS&waGIzTNAUPq=JabrGtTiRPaR3I zQXIvMWBCkp;1zWfF6%qJ0-l3e_4e8+H2!DQGMxBS^oXDN_IH>Xw^Fhu?vH<-+*P=@ zuPq&RI{-%VFa>=73QH}u_Rg{T;cL&fU!alp+EjFs{b_)}YJk~(zqo?7`44~iL;OaB z$%n3TcK|Tg;8_1--k+9;X7o>W1Soqd3WjH4{eNY(y56c3t@=Ooa9rzu`v!rY}+fM07oML(rL8yZI|AA32sst>D`d< zBdtl?d?_ypE*rzfo5q0cox9Ki+<_tJh0IDRqhrWvfX&Wz7}9k^Zg5!x9McU3dC>mMm**E3P#L$j6Al;X%e4>m5XUmMXh zQ+d(&aj&IvN^z9K!P2;oBmV8q07ibWX{pYrv(WBdIdl#UKUPJRg392@mCH~{)d*0$ zmwc34Q_gCDJ72TUzeRZb+bccYQ0kayQi)ny8w9P19 zE~h|wI{@1Ee+8C@!@a#y!R>(<;mjFA=#IeZRH=1(xpKC^P0uZdcK$=_f5OaNwBTb& z6S%Px)d)n(AeN6_1sj+Wcnwnk$6+II7af5=q7(21ep}EI&{z=FoXcFvj;s3if@=(jdv4@JMpLptl!cr@nOqiVuB2poykAuR*Wme& zj*Vg;WRuN^h0^pfC;I7=YtRC;u?(!9;@90|Fa*+s72-4*VzcOxj}(^&n=B`#F)5_x z9C`RNhonp{>CBUn#!i!S{50;{Y-8mM=J=v@L|L*fxSK1l0aM^|cHA)NWt;4UYUtajJ`u@rH)UlbD=epPWEl;jw zNs;%3sbQ*{(*U-E(*VoO!rICC${aobe!J>+0@x8iey<%idjnuOAmhb1KaU2WfZd1K z_;d3g-4k&~{JIlBVR-EdMuX1MyT|G$8|BiJdC3zC%pMU&|E18JUm`LdIf9izA3G;P zMXJwaM13nY37lWz&kLid!68(fS|}#?;KW8SA*Apk_^^p@kKYmC62e~RGCT`@hE)Tf zq9NJ9sFDta;3+NYSNz?Ai__KrMctb}*^OK2f*|jn`=ZoZ zQc0@SRc^aIo*yP+esRS7{w`!<%R$d%>ql5m!CLM;=}L1P$3m6d;}+n%VPzn%N69A~p;`ubAB& zK4jFE3}HkxUNH$GN%4r-ye5IgsTpHNg0PaNusm&lD)j+6mw^CV0C%(N%OG9@lN;#l zub?{Lh$@+J1db10V`%^(hT%0pH8Yl5$iYgyCc{vQfeGMO&?^@Kr0zvB5a2slpvLlw zfs27D7|(SgS^(K4@D6qf{0+Q3{2N{=g9(iRM~Dn~^iIA(joX_8c6+4GyRIcYekZw! z%ktm~*7D=Ddiy8)F#fv_ZwI`dUB3g`P{Cscv-_OwE7~AXemWk>=SzJtK$H$`b zR{?Mo!E(ku2-Ev&Yp`*N>i>iRf%MK>ob%JcDy%`*;2YiLp*Y?*v!DJ?Gkf@Ns3y*( z${?UL$nJ34B>PXW0S_*C4Nbsom<!MEKWfqPJ8=f77aoCAiu z9N8s~eO3|7E~uS5;2L}y88sSu83UKY@W2$TPp~k8;i%4uHLdiLDc8ND;i{_&z=_WwDoyzySO zNW^#Q5qABf>)+y-yZ(WWR3fH*y9gUwUttcyG5miSnktD(R@S-;f2C4lH_wzq6P7u& z>)6MPpXz>0HsQi|(fkS){aUx;wne}8n0ZISZedXR#BZvGRkJI~M1H=n^900hr{ z0AR5BPm0Zd(j6ElQ00&e20hO7b7rCmfDk(R=zV>8a&cvxIyOSL>I-%KXydZ!F9p^K zEpRzS>(5^Ph|d4tafzD+H#xa6EUZ0HkVjDXE+=?+4K`RYd)sEV^T?PNz=OZ_tUtye z0Aempv{tjI1XU1baNDTItYQFT)*d{;SJ2?C%C z%~;r2xT<_?)vV*6njOser_(+R`mUI-F5HHy|0WDo8LOY4{W+4}GK%&w6Zx>;I6RTg zeY%ZV{p&q5Lx(?ou>)hgL(Kj$Aiz_I&#FmAJ(F%gy+7on5W?ky(&D{CmVAE>&&=7& z19S3!-!WM62J=j+OdxPk2ad4ud^Ulw-^Eg>BtI&|JS{-_zijLMury|ew+ zm^WBTpdw?mY-ZSuB7t_mY(h33Wyt_588tc2eIQ`hBl0{!fR#ShlY59TH(Ft2!5^_a z@HY$uUP%PH(IWiNC-g4hKtLO(?YU@sb^>%Nr~$ah`ek4aIu$-j%$cc$`7suT;Ap2H zc(4%oEN3d)o67*)CGhy*5xhK};?cT=a)lG%#y>0tVn+R?+1q(iLmssCT3d zj!wlaXoS3s0nB6~mW6qwwH?wz`G_u2oI^QtjD(t7yWmuh{vrp(< zg}h=y8Q>|8#!_EE&z|m?lRw=v>E>{Qxs`P_K9X1mnYmB3F_k-Z_?2GN^V0o&y3V zY6(uUCiDIs9+dmWJpPNBvGZSpjM#^ogMkFbEutNehd*QVQ3e7TX%Q>t9|J`7hggqV z&vqX?=0E_(g8SP~O}cZ0r2(p+@vz5)85V{VAa9o#0c@DLQ0L&~e z4;JP`sxa9ufx8kOc(`y417M$-4Dt9qqA?)03Eo>XrzhK3E9b*IM|%l1*T0O zq4+60g3%j0eRlpmGcwnp8RgD=pKaWLYu_T4X@Z~idDxaX?#h+rzBA&n(?3EV@pcb0 z`(1PP_^p}#j2}9E&hQaP7o9x5foquEkMVqBIZZlpU3ThnuX8!mg}#}soSD;~UYOpU z=VtI5ECs}D;R(jv`Ia_tp#cCyN^fosZ*487lZWqSd#EKFzxbi^mn8sf4wOO*km}|@ zISkbr!4xw95cj{Qi2la}^}ifB>Hy{H4+78_;l}!8?ZQ$D%f5hJEgFFPBlnkrI|NsS z-+5uC5C4oj1W-V*5N`@RL@cUw0KDn)6yV4Qf!{3x$&vvy1TZ!hNI7(!lV7>2n~k{42~fADAO-Jaq8> zF=7eqWA-_P$cQC?dbSVX$=DV|q_O^~U=El{QRTwIw@=%6*|64mPFlxsSxF47SeZx> z^$U^=7Usg1Fro#3y#|*7CTqV9><^&rn#eZ6OT$mhTiCX6rrndlua@U5Y6mUVn%0UP zm!*u3!eACOd5SOm9MY7 zUfujA^wzMH3?sqgKixO!l~vQb9Ji$1U%@iK#jED{-D`-d%xg^0hhALjeR5-cuzK&! z!P~yf^u*#&mID|cARh#%H-OmcF=B5_RKP$lS_(q~Dmz}0W|=&xAAM`t|2jpWcHlsxTOqVO&|fSAo6wF9Cd z01USz=YZe@DkN$Lw(ptb(VsCOfOo;#Rg-Mo%mxKCDC`eGH4~0x&LydsT?nFmdjsr2 zJ@_?d|F@xTevG97>_CWk^hf*e;F5-q?n2@ZDpUwgrYb;@Svv{91d3`zaH$n+<44RY z48Kjjcc{t7&gmdvP`nsA84L$rbP3$seuF{4Pq+uLK?#0b(cwc2unxnz?ZY21066-H zv#^+Y*zK2{a{z!RN@T<$VH2R1!@=@>`2D{N8)6RlsyRA%5n{$JzdwgzH^`q4c*~*Ttg$%F0F9p1|5Y_-uCL*%`WC zN$K=qfG4y39qI6=k1)&M#^jhI&=g-^s`a;^(jQ}{&w+B+8GfB-NNB=BlaOu<%-QoD zbNZKuruTn*jb-C@4OnkDMpVFCX7|Ux$&!nY4g1pHUme`|zwTq*FzIRkTet%PujrSx zpJt!!qi5&G3;>d2SpAEO0gV4>!<4)Kk%0=6og*R<>OJ`C;^_9EmyEJK%xre$Io1E; zt!pNYa{IyO0w0Unv%jJKu-fEoA@*x8FK)@VewG#UF6OCz^9jJ8Xa{h@at;P)KX3xO zjHl1c?CJkBv+bkKU^)b1@Um^7~q8K_PTp%>Klo?GJ{~*94S4j+K z9blTQE0o%4K~>IO0((ao0Q_Jku-&Na51`Fdp_)MbdQCI|2WJn>K$db8Ff6;4Ds+Xc z_d>C}07U^`MXLWN{VlURx`F(5P6sE4V*HmRH2$NvKul7)F|u`qZJ{Z}pebZqV2i4p zHyjC9X;!Za#`%f6RPGmM{QJikgkr{j3XA^L(T4fmC!d+m@%_5UIQ{U5(iW^!{l%~G zy`3FHwZC&HYx$@5Ucvnv#(S{dhnp8VdVISO4<)5qAG3Vv^ee*W?Z87NKTwk{uppDd z9&NUGYEJ+0#Pq+oWO|=tGT1V3;>LI5OP|P6_}TuBSC~PXjK8`#zCB9c|LN%D^cXJl zMc8Kyv&;^Il}$5TMI*%|1pA@Szkx6G4C?DnspUpGi?zvI4-4}|JAmU5RTN`FEVZ1z zHnUg!-NA@($t2VaT=>iwEE9;Up_t@%l)Y0$+ks`jfd%Y9IL2latG~h00KyFK{|JM@ z7g!RY=Ku@_$GCAEHM{EG%7RGRcs1ZkQRSirsF(A>_y++>*LUp5F9zJl3XKa@nJmW~ z!BzF-;0cy%5DHrxU7L_Rti+i5>*LSO9+q>?@UoR-=Qv@U&$>mwdKyQQIAZ)aMIe|Z zxI;n4nDh+Be@}N`n(+YMEcB0*q!o{$5DODqk4U&~jTk9pByXYC1-8nb9X}2G_Fx>h z2aEpMtdFqEm&}(JZe^}~h>;>b{4E_jg0M8=lbJq@_s$-?f{Oob=8sQneM~RY zO|In+VYv@IdF(f<%l+#Di%)xsrGV2%hvwwFC-4Y>t2qZGEolgMz~LG^d;$XiXbgK> zi|LgwE(}-x$5U|!Ec#r#FV_AUhJd|O^x0rdxS$%1TT0i0-Gzm8icv)hV*?lf z76RlRDJ;jf5wr&35PNX{gU|#mzJ1w6?LRgNnY}>JA4)rq0aVUH zzppjw=(6wtNu~nk5N!_tk@(>8M>{SV4B*Rrf(P{_el%DV%>dR!H=r57dYYNgh!6%( z^fx)LlnEb64RwWzb})wh#pse5pZrE5(;Z>YfxYc#GAkWoX<$Up0on<4qD>KqP-{n( ztWs3DP>9+w7KUgg&*mV2beKw*?7IFxmS0ZC3m(G{Z47&iqrE*CYyK$OnS}Z^JE^!i zIc}-JZGuO8>u|SwgL{P!pt1_JyG4^E3luBgeX5Wuh#TqzMq?v{e`VA{8Z5S@BP{3r z@aBQU{lC1J&HghEas0{}gykybAl(?)NdCpnhHW$>>4~7RG7{KNS4)Is4u|bx5t|=s zesuZ=nDwX0$Xs2zXuiGlxw)}=4R#yL$m1tGPx?(JewCm?e4Hb`pJK%K?!cVUYXAN# z81vC`AM5#u(wHnDyzD0AM8_)D`j%|Kj1V*Pl7%`37nzF*c~bzILlEmrAASROdop~2vR*f(+@ z(4%`yC)x_Ef?1qdRAg5!EFk+d28QrexaJ_hrWrb~(s4stFxIIX)}PBrz>MN}y!R8V z`+tww7hFzVN!ts&CWB2x2K>alLEtBD6Py_XDiVcZQiSZP{-31^Sug8)O-%$|eeC*o zU6vjsdoGgvLH|lb{d7}lfjujE%)ERi0>)<@*lhw>wSs5$C*CW z`&%&J<9a@OD}G~r$*#N)W}bY~WeTvCa(u><<(`>7Jv67^JuM>y2Jlk!f#a*6n)l!T z73~0nb59!gl9j8g{Z00Q&0bjx&`|kVq?*|{MwgG^I7VPWp ze_#kB1Mxv5b27w{s)pVS?tdGTWc=wy|61DO14QG8@x|+Cty;@yLxW(EuueUD4z)Vg z3MEn>3j_|h(XqR8YD&MxR(Z{>2~YxhBz@M64{Jp;fYI!01S5L+y%-QCOSxtMzO@p3 z=tBnsE%j6J>PKoLdf0Pfvi3W%72t+7)Ce5z-j^Bbke&lv9%$@Bs0`~ATduYJ^**+A zSZK_gU>iTel`#5v6%(3HbjY%#l?z}UEM8vmyahr>i~+}(ogucx5rQ}k#ut$v7z{!j zM%G>*e`&T4XbgA&g_x?(EzzW&A=$Hr5YO_+q)wnf}Wi7+7OXpPi`8 z^wBk8!dIE;x9}D*@z424iCkKdoKWquRdm9)$dJP8V2Wkbvmc*B3veAC0WcH~@qw_D z%b#MBHGw;ze*nNf^|OuMwT)pqdUKp$lV$l(NFS_&0O^~N&*Ldw_A@&Geo!z>cc-=i zK*F8>l)(%t23Y$D)4cO1@$3hv8UXoc&{_V0NBn>+TK0yc^oO zA&&87**$j9jkx(vF2obf0B9lzjKK$AZpR6|3AT-Sd)Le!{K+Ki@E_g!!lbJ>GBP2& z30j{vCqrbCCljmDDPgqTUovC3501oO@QG|ke7t{GIw=OQp$j4H1Tt4(M>}=mr@-e$ zhxE>qmdfWl#`5yR^=S;)KbB>fv(WoCUuRa84E{l zU0}0Uo)P;Fv2IRPKfU8N#_Q(SwCG2;-V4|VWrS}^e8=yqF)CZs*Hs?KBPy))WljGH zLhizl@9ZI#b`P+T8=eJGpBI+wThIS+M-p18tz%;bQ59+n=6HH3g!H0?CW{r+BS2ZKXD)sbd=x~igHCKB-{^$TL?1z# zmOev=e*>Na&(T5sU=9#&`1s9Rj7?6&U~tG0Iv)5WN)w}vU+Q!xF z;?xq=d3CrhUL?pDsxzu7e)@Yy<_rOO7%XQ7Km93O_=uOla=y3enCXW^Vbg_p=C}eD zgtZEJ$`nCY;1pgin*UO0Fs9I!ibudVS4_HIGmN$I!Lv7lMjYM%hdzUgPn07Xb(KvFZ$rF!Z7IdSI}!ENyXLIVIpUqTXP=TE}?fsru5QLj^~ z|FJNUezVoTf-uTqpC0HvY4m`-1S++2UhF={EE&cT>?~a)LPcVm$yeUncnVoP3SKp< zdc`NABh4xS$CX8st;u@PtAO@j+v~Fdlru(CITkPvN6)p+=qN&r=($fCXV|g|*8z`rdNU0`$!p0ur6UrXg8Fmx$Zw z)V_dc0?o{L3qj?$Cde)BJqfmT3;%L?c=^9Qt9xmIkby5xD7DEqL2%_0da**f#0Ld4X4xlb2#iffLaT;F_+F*#BYn@VPNR{}rR< zEi4nja1zS|G8oVu3>!=W8OlEZ;wwrJ+Lc}di`a8uy!^H!` zLbU7j+cau})dXo|GouDm5v+kwDJ?Ima5_M#4zk;Lky@2bNxy!U(`p5;){PUi5sU$k z_U@aLqnDy}sZ*|Bb8{eeysv2th#6qj7_biADv%&hDut|5s9s}@6YIEB82_!nt(1m| z)f!cy|qS;W52Bx2v*6W-8q>r~Rx>8`rdBFmJFA0R}()Z_&9A z5GNpi&g%mK?uA2lz}{p5y91)lJPBRq==MhMI$|CDb;_6T9O3~42LN0{7-Tblnf0p{ zAlC%22j@@J{~MEZgslrNK_?NS2^aZw!<~?-sdf`s$Sr^0KE??b7Xq^jn~;#<-RO81 z9qetg*%RB5W|e^B$|EPUbuhsF4(J(zpeeKcM;KNAjKRQvAg;hASt3X_Z)TnZ91Qq- zT?g;^voP1k62PVy4UQH+mr%op*pB#U?-61O>>|P)JF}PwgAN%gO;WjV0MDPrfk5{` z0Qtqp)E$QM3}72_wErH)moNsLz(XW7qlP4Ox8pX!Zx6oDi~%_xIEU2wD&#z9{huZi zsQ+QN5`N_c0|81T@XsL(7cWf4qWJ1AZcN*fs1^v*Ua5-Vo|(VM~DYY!0&hY|Y@ zPiAHbhJD{$xGpjJuOVXJ7(vH=u~5A#C0?Q#JPc^SH~kqQs@d_wZ4W+&R7e}D!jlCo z^>R|f=TmQs;>&lsky(^RokTpa0uqD^7DkCt2a=72pc$nWWQr|@xm%zn*Fa#fyn%iZ z8oj^(0E*)NrRCnGwMjaBxi>xJTnjX%AGZ7E{G6Tut#$yu&RPg_9U+BJ;SAP@GVF^GUoRIooQS>PHk|Nmjv@mcCJOdde zt(ZkuPlGjf@GS5YQ8Q|=ESA9l?y)Qp0PYmKAnx3iaKz>T_9oy4MHiqIfG2^0p%13% zKvKFjdZEj%DCnS47_5y4{{jzz&#+|z38juF&iFoJJ5JO}z1#5Bim%FI!3 z78Ti*3y1UpIu+<9+%GZ+XtK4WsuuPJGpzrgpzZFOvy;s0NwWJtXHX{RGfh*Tl zSk(V0%K+`KiBc#UxW*y7WT`^B05AzPC+LJ$z~3+JxgEm711)G3+~~q7_=7RrA|xpP4VPzJCeE!b3#t z3*M}((a!HbJADS|!3H~LcVWm!3;yTuZo(241M)B;UV?x)>;UE4ZF6Q7wW*7It+!R+ z$SS~HCr-LmKmk#@)uQ}L3oSXUQzwdMI#9VDnl54)0DBZnvF&h5V?cg%tYi-aXb3o9 zK%i$2EQsnURQ(BJ>|DT3yX!Caj&@P1lknmwoqui!c!s|FEHeaTxpQs7Hvll7V^87f z>(|LHYyk4@e<{7L`%7E^(FE|RMAdGs!_;ArtXHdu5-TBuAygfg&~ebhJ&>?Vn87Y# z<`@qa)&E_S+-*vtcP5g6;Q3**;yLL0NVf2+pph+Y1^8q0@hi;sc>`~PH}{OW|Nn@s zKnjarvj!u=F^tKYJ#U3%-eD-Zp z1K0|zk3TazNB7VxJ%=wS~LP&W(j5&c}d_q$!OU32Vv8j{g|<^FTU&bhb3?TexVx+`MJJg4S;x zwm_9oy`h_BH`|AtLxVGYk5Ihu)j$0Sfo|?&0~;*;i3LA=^wW#*FkqY(=S<&X?3L9~ z;K;HlRZk;e3BtrX;!hSK>(meLFA+Njb1ZfM{jZ?4_3jSu`p;te0Dd2R%8$cGZQ ze$WY%C&9zH;Av)g%tT?K0$QgYoD$n{CIl7HqUiuFvZUpK!@&T*7WBnBd1+>kF(SvV zh1s42w@h;Bt1Jw0>=Hqpy^2*Z4xMnOKgRksLJd!@LL=}BwgGqW`={A``wE>uwj{>V z05>5jBMd5oI%Du*Q6syN5faEz*5ub51Q5;1yhbk;hG@CmUhy+peP~V6^jP+47%hE? z8CCOjvPp26U}b#6jQ2KR5QcEh@CK+&GHNpGWwRZ$#6Bu7g=QHaw^R6-kNcOP0f0>k zCm{-GBU|SOc%Q$=u77-=C!t+D1t+Fm38+%FFz-ZD>7FA^l9HR!P7{4B?jzm!PDRZR zb7^x0`-^-FyPunD*D%;yftsH$za!b?wP_q+ow6{=m>nKN#gBD;M7KLdI9{&t!}1hH zd~g}wz^HYUh2kx4M+|Ri6PF~80!Nk$Q}XOK@B(FztBC29)nckNy|5Oe8Z4JSXbUiX z@CMrKqrdT!(J_`&0M*VaVv34%PiKc%7$2^FY^~30+F$Q4YTrAhq5D;EM z=@flAIIspPVIj140KoNs#Q&Gho@)s*+s~N+TbSw*s{hd^%cCo(uIK5@_@!`n7;Yfi zS=(1?AJOw*TsC9puTPeBPcmwe|33m=M$*xqAAwh}meM@;9znEs}UE>cohbN*zt}Q?)$J|ILspq zA{LY^4+NhWM-xX#9RX4${BZ{XmN-?mRsl~rfSSoJfk*p~F@SnzhH%3SCElKKe*=*L zZN~KM^s@-GN$nV$CMyl z84bsqODS|5fmZ<)9IRoV`i0UM!dXX5F=m`CoWlB_DkZzY=D7)E(kWt>B~^f5Rz%@= zW~Bg*1=TziJgsbvW)nKgQ81$Mr%MECFK~>|nlBM~5c?=3ix=QU@M)$MV9=ofW|vK! ze3O&%V2O&?gmUI2nCf$@+y43nTnN8`!5|C;VdQqScMrcEl%1I|?F6{7hdjbIvz(;z zl%mRolV_Icpc8;*k&a0@!z~l}RWiz=;w(lc3noAkFE_S{pfTW%*i#G;gMovoP(te= z;LDfh&Hi`T)eXi*aKlkuu?tv&(4ewyamFgRSeh1o4)2w-V|G4OX@+WDEL z002M$Nkl# z#0>E)jshP)H?2TJH4x(J&_D}jbfFmmi^q{pJx2)Bw+~Bs?#M?Eic5=E&1ai8q~l+M znqLh2f^ua~wzf_Ss2>>jlX3WI#3vzne}EPL>m7VApyH?T?uPp7g9BfTXoi4~{Z@G4 zyalb*?E=uwr3O*E4DteO0=pcxrGz?u2Sdrt=CYpBp!$Ebb;a!6`%beON8W|yvDsK1 zC2$-@cbfObRR055e(amsU$gI~AwPdFU%qsH6&yV*Vv-;L5Rv%x)ibJAbbK zGXT)-jsE(i51*hwlG)Ar7C!JUmKNdxW~}>fFgqnjvSo|cQkR=xqkaUuOggA~gpVcb zhwvgT=>;u%c0KCn3YG~`mhzg*DE!fI5b9g8uXy)UW;pl&frhZQm|TRd01S-8a1cf) zU|!OwpD8cq2f*rR*)`SN6L<~WG=qgt%-QkpU?Xr3YuIkQ&EFVbR|32(J+S2Lt%-n}7@Alz4vx%=(bM_zR z*G9it?r6{^5OQkw!3m?8U16JbVonyHpKg4o<`_0!BedTa8`oqjUaI+*5g5t4zOSOx zj!jNA0Q=Gco?-AYgFzoH_$5dWLi5h{55!$hRQwaH>(ijLuHsi3+9Wo8*E!*1V3lrz zh88%8II_B++ps#|mrt%;P@LD~h^-g#K{SPtv9upP6eJ{ zRvWxHFYt<-%1KsSqp6pyLf2IAQz8)r3LFP4W#HZBV1P>mwB$Z!#6cLSyu2gZ6sH&A zPAE|auK@-l)wZc*h@V3QJB#XL1{R{b+js>#5u&r>PJ~B@cR&?5;|cIrEDtDh<#DK7 zC`9czAB+qFYLsg4PNTHUXuD_O^8N^G`E&_H#6{Xr^q@TnCBB492nsYtaG;~pXBa$T zK+0;*mE5w?>4fV4N&li*9y3mX-L7tC`=ao@WK zqv7|k;xBgGL#MAQ{(=w@iwm6R$&;!0x-*r`KvLm#()G zKE5aE5=IS&Ac(#qImy-iz~IzEv;sVyAs_C`>6NwKMJzo!X$cqnA;1d+kBcODzr(w+aOhNL?d#weZ7gS^l~xV9t}5U1cPy;1RJ#k7d5p#*5_m z@ur_HZl1Uk!f?_oWw zTkJjXr8zx#nlBG9p1`&&4-64uP&OdKlP_YBPru0 zh9#U)zrJCSwnr%=pv^-V@;={tX_hdf?D;-=MZJ_pNIJJ{O$?Qzjb<#Ia){&4rIKS> z^P|(JaUZoNbmRLK-l>~#(Y>&UU}&rI3}Q@^66^ zF#Pj<>dJ3JPAHPDXj3pKpHkC;=Yf$CeW|~=f_`!-H~_$ax_@b(?0G9}`R3L$dJ7(%IuynoIAp(^$%EiP7DXTx#|ATZzBL7k2;7%Dl z+wd5+Ja=HsduC2C%UyK86BQz!wy41HA{MTJcupC9{+XITGwRz%Cp*UT{ORf?iO)|r zz9p#ntMU0`U(^nwlOzU!XV`FO3hVtd`s_c#lIj5l`84Q5pq_LSR{V_4S6A_qO&5{6 zz;>uYC(tf3#KOkHMGDFlJa+nL&#}CXK_OlUFJ=z|fD}LT`neYd-=zM=A~xT}DDvbe zTc!uF^vTo$aORKeqR&Qk#HKHYp&3e%>YoWd-D3Rbhychk5-!#m2>a=3Z+UT;u0g2a ze7d)=f&qYK0KrDqM9NGIdHe23=Kkj#hAE(p3_QKmVj&jsPw;>gl-xn5h2O{11W*=b z?vTsQB3NsCC;))v&f=OM2B_X8wg8q0rcYpzO2a{@D-)dO za+I{1QaR)XxI_jVVZC^t#(*!--0<88ChYq@yl7TNpPILa|7oUF&AC4CK^pbKOg6d~ zVnS=SCbwjnp{R~FLmdqO&*A#V;6G!;Kp#Rq7?&Jv;Y3u%p>`$WdBdqNrJQ^wRL##B z|0x`!7^e4MFJ(r3S7Bs3!DtRoYKE*Lt7t`I+VU!&4o7tQvwZ}eL7*P)ML$I>{@EJ_ zi^EpC+<1o@@KD81PoW~IFhxdoqS-cR0aD9U*rGh*q(-8Fp)?zCo&sh!U>j7kj0jla zf`9tnHz^53$+ULafX927zz#qHDZ#z6w}Nk{N8a87HgUoLKuI=ekt@>jsJD83wZHuL z7sp&HkUkmN@)akDsQ;T00UKQF0|4@q=s}DCn2#oiWREK38hS=KUSI1iFZ4}Nx1Ye> zY_PHc13=HnhqVQ@*&aHZBUqvG!$s=9SR%7flXn*+tCE9mUf0eP3p@u+AF%?*2cY>i zn!Kb&K(qolXKVqu@XhW+JM$PD6LGs@F&z990|TsSaZ2vGVdT$5dUGT$59q!Fi&J1E)2_=6`#52je$rOnCo3IMD+b*6N0|KgSG~1|)g%JYOe>zZs$-INRCkAM}n~2BaA4_z0kFSjvNQliAI^w?&;vDU(ii~Tym>R7Zf}eAAVUB{1e;(v z!l0=!+zT!*_u-P5E&<3RD!*G80Ibn%sKLL)p_S3QpP|0OG5|-Zq!$3s5Nka3vK6mn zD`yovy{N&sE)~?n&s*#*a51s+3Oq8@3#;69s$d=&OB4@HJ|Wz1o<`qdIEXdG*Z+V) z%N_U!<3W}{LtkU5;5vFN1iFyHKuJ~3qGhPz<(C`?B>g2bTK*ay0=Juc{-O6+Wwho8Vj?~*w*{8Q|Lh+xVHr3?diF11qA z>PQJDzl;UIK64t32nYvm^t~V<(Re|P1XUAI^x5pg84QSFf!Vj;zki=_Drv)TPqqN= z0~kQ^)6oQp*M7-hV0v3iy|qyWn7w}n(J6Ud}uj1lfeLE3p~g205)xUjsXFe z2pD>p#)Al73jICq0gU}k!zl+d+#le8`vZtEAl~{FlrI@cqYL4_MOk;F>!g^mZ50cr zbYqUOG^=pD`}BY~K*!6VJxA#Hmxjyco2_f+>&@Hd+R7!wV&HCkz8*J1Hhsj%x=75- zGcX~V?Zcq&Id~LW!L1B?GK*@zx0wg(;UJ(wqaZfli6ugnfTzHdUB%6>Vqv{- z-U27PMrIfEAZ)F$b}4*$U+|k@XFvvAO4jg^@}waq%PIOyJaHZfx{)U1&Bfjt#(6y~ z>hq5C#|N-DT75Tn224(|sb5}B2_@Av09^l1lBK0|dT@{?Ttlcv03=ez472~WF+u>Z z^tSN81)uyBUt}%;WT?Wo`46)Ob3pe$6xG)*T@6}Lpg2W+id@NJQP(8AJTybJ0y3&} z4L8ZMAVj%Y_91w!ZQ`iAT{jkUNtbFxSt39o_iliidUof5Nf2AWNW?*C1rS>Rru|K= zz`XKXEg?|`;Umu_g3-#ivOI8z<$*)UakRIK@dq{`VmtxZ&iU;YSs5l3D7$L@ufpjE zwyN|ZOdB1g90>=KvQ02HU7;3Wv;;RzTLrITDOnu(Dsqe7SNs2onBs2`3kowq2b_iC zJ;et^)c>R21_l5a*vYH!1($*YEEnB*gJ%Kee-n*d?#HZ)$B5M6TsRc%bWIGe$hS*xnd_TjEa*S#rJ{EXB$J2*zj zSlsDlyoij&PoI5l0?@2Jmo6r?JPWs0l3l7y4LBAwGPBpfk?o}&1M6YsWagFEAwdUN zF%|R5S`)B#$v%xX80`F~n5gtt{qM$LbrZ0dWd*hdW}ka~xwplwf#2+5kL}FuhtkQ9 zoj-oblzljZ`k_zHAB;*38Up}&05Ecp5~>}u{Jb2-f5VN1KD zcD#!jC5%?;oxkGL8&vb2tPc7CLq%az=|ESB-5*D1(dw9Q(j$;n058AEirxN zxjeua`iJlTfwl8{=H&G&Y_ZFM02LB=V<6|eouNx4(yD%JSrM(23q$i_;m~A|nS+^= zgNL~>AeLG*x$X(d=n}X(x@}&T&1|AQU z%=YQC4}bkLMCjx8yO}{B-1jb0#g7h!BU@JGmrBm(&6(-!m%U}Vh)e38uT$VB0@W#N#K%vAvb2tb%dGo>x#@oKRlw4RsAN*zyo&bDN82|)N1UrA) z0^nTwYaI+&u7CyI$^Za+03`SB-NWjBDmDN-auh+L`Xe#!IC2Kfz|uJFFAg#ffP!NE z1en7$u4&+*4W&aE|8Wq&nWZn)8?*vPJOb2G5T^!fUkaXwrVUp=5Ae&R)A>SnCFpt@ zsCu1^8&3&2q03Byb>&5DCGW!JqehJYmkGq3FyEBu-2-DD{2TTmKwSIFzk;p6P4rN( z8MQy4A-d!nlQ0kvH$n^o1`FJl_!W%jew3N>-rMIWI}&v|?F9HJR<*TSAr-{OunEVU zDpoVcO)U}*(+(~J93eo~G4@dCj}XS$)plf(i`PSkMT5OJhyTC~9|3vc|n4 zv;P!(60n{*3n#hb>52IXVZ8UC5xN48pAc+DKq0Cv*d%`5aO6OmC0~5kVB&)17O44Y z)W@Jblm5hfgC(u6wxH%;z69(3E_)d?YZ1(WDA{Zu5&G_;)2Bfn492({UxLAFvI0Ap zF+SJ)KIYBA<(8}p+CB~rCAgz7&(dZHkSUM}+ko>B@MIUX>=P$l8z4XT(sUF!vK$o4 ztOywdBuKYbXwjqwV0wbx72h409>07S47PRsUpjrjNZ-x=n?FwKd1N2|=Rg0sAZ8B$xCO9?K|n&_Sd1W)AdmW6>?fmz zVFDd*DB**<0u6x6WlYhaYBN|f#Pkgv2=&W>WHo3LilR9hEQr&jQsfAphh_ofIBDUR z70*G}!Ai1P_&L$$!Eq9*WwKfvh~hRfiWJ@!WB>qs=0%!CW|ON0Q$v}xfUp3b|mld z&@3(WXZ*_YQhw~ane4usdHhkkpZD>E6~guaz}R~L*aS#Czs?2(7)|i|etEgKJm@9i z2qk!N`b#U~)&M&0M0W?M4k31RROE&(`*>EPku zzf2dPfI!yM0FKR~a!%ahBc+5Y5X}n(i{huiAfu-tJeKjtHF(hq0PO^7OvL`5egDAB zMi>-sz>V+{1_RUzh^;{WI4XUhXYJ0D?up@sd&708qv4VT4}#OfC+I|>6~JKN1mUJ_ z?*VG7GpzuHwgqtU)ryyJf>mDTNU^jUh!v*v=jZ+a`|qB?81Mns5B~+_DnkV{y8yXC zx+pGzJMSMtJ816@5ay-S&T`kkjmcLSaPS*bCYypvf$xL4yZuPw{;w@+3Sk>?9s-{1lCgEx6}BM* zX*q;*WLaFRr?Ier6ZTFSYH|ooeDSdi!1xT@ayc1U0{}~c1RtaR5^SmXJtv+g4bx`?Eyfs2LMV*NJb4gq*hV#p&G!n#H3f3 zl2w=(*)$5mdcr*bQi&_CB(%gjLUm{m0{~-}a~!RbpQH8UMp(RKPd@@)M$#eYN8lA( zO+TDNPCsy^L}nm(N)oygidF!#9_(~Cdq&N`chCeNu#k8Vz*YdNR+Z-zYrTC(y7Z_fLkZ*%<22j zng25O7|3ue0P9q5&%x;tX8#WWiY=atxc}jLS!6n%#?r0Av0f*z=4X^XuJ50~W@QCi z@P01V{5Q>2JbM!axa#TpkXEjvbY5`I_7SXyAz@X`KZE<8tnDLGT!PuYMCc1GgL;X# z6re8Ant<4P$HKLU<}8k-?S*p`II^6)nHdS&4pu_Q`-f%H=^IRhxW?p5c>WkPuZO<# z?8xs4fQdox%8K{~)4-1pyZ%U-=hWhBp7iJSJpn46H&q17Ksdk;-)Vaf01}beKaUVS zVW6?CmEIbb7b`T#)J{EwY)i)rMOQ3R*#JC;@4o~AA_vILCS!8KW<}ZmRzOlvAPcd) zCst;}Y4HX*Xok=O{IVj4oB^B=tL(wmmWz~A!4%EQKml@uXguqE;yuPoARjuh6+raI zox3oOxo>6<{sdbAXaz2RBiaGc3UIw!`A{wu!7F2^0DRGL_Q#j8Jb;Z@Fq1wxcnmuM zdJjCnfB+$Mu@$dG8Klu*51no+KLV5jDm=dRR;t2S1=guDsvs8SGzJ`urkOF|AtD39 z&Y>+aX8+pwOEJoWFR*w7WH@17r?@XuSiEmcz7|bF8y_s-nI|y(%Z&d9SjDqvHep^> z+FfDYZB?hqx*tOevWxX}2JXR@D^Trk!G-TLsQN!K7oq0w`>gqG7AjtqLHG*zvily^ zed)6=yYI=`{t3Q|c*bDKFKhc8bSi!F)bkK^m92nnWK^*!OAcG0R3XZ%xn&>;j~t%t zl4RIS4qiYFx|9NO}3L3wx&wB$qSAJ*Ea=$|WCq0t8$Ed+0OSZw3bd$*jM% z)L+B$UJ7#^&cus88cZpTXam@nb58*F?d;?8GO1mq^A;CC0CCiyBL_X^NQx}SwQ+9+ zb&_ry<<3Nl#-8N?;A~Sy|3lQU`Z`zMY)-oInG{vIT3GWE{|I;)Nr#*t%*#R3YJy+- zv{D_4R@e&Q0yECp;j2t501pB~TY)RzX4@3oT7e3Y52yi0*#qpn1rGx89zeKV4g_c~ zz^!{YB*xekP?M(RYg8))*(h{D?X0W5`Du$E}!DzU*I=&5; z!2fAZPu^Pt00(fMMVU|WH5vD^u)++&)Rs;V_x~P@{|;fpa~T_%xRa+|Zs5pVKTSR+ z^xZ$CQ6FaeJT78Sg3s0vn;&Za8&LB%WAnGL?egrQA!o4mmbLvKv9=GxzGC;i3BK4m z+ZSz-QYbOZ^d=wHIO79?s z3he-{t$XjA3;_7T2NF#Ed+Xzb?m4{sji2`2+Mn~tKHes24*+BnAnx!-VgN2i6ZUz| z2v&z!sv0F20EE8~ssXT>@|+DOiC-MV4LA6Rh?|7WvWrq3J1MmLsNj{V*`O>?AS<6) zUK|Uqe)^F#0Td<^$C7n!8FQhf=d$S4>tbIkSZkXoK#rhzHZ9M&6O>OHB4x?$gw%|Q zt-xI~`zLG##t4fE8-e7~*Hx{6(pORRy7Mt#9$2_3@%GP-5qftYu>>#}*nj^s)b0o_ zgou1xBA^$e-~@dov4q&~G=z!Zt z|B!X>UZuln%EQ1vQ+NTdEZ&4Ff3t;pR{RbF_#fWhhfxwDepVv?)zRJcsza48Wm`KD zvr3aY@lnmcdvq)=d^31RtwGKI+pU}CbJ(0*TH4Hv`sRA^!Oj**n@=miP9LFpXWRRQ zihs%tVBl52&0x|MsQHIjW8%QKj;l26BYDNZ5vKyHLVA$%;^H%A^Q@m&=++Bs*G^bR zX3l@Uy485vmtMM#0*6>Osmi$ny;7cEuq$KoPZltdz`ajkcshNJ0YLSp39kO*0D!+x z!b(wZZ2^5SK1+b(k2hS7?6YADSe&zreS59}U_KRhRrNhb2+XV>k;Qy{n&h~OAV7n_esBSY`0a!>! zeZ}Hrq|qRk26_xGwEQcKLmrC3Aom_P;?~4a!PA@tTexF+05lu-gBh%hl^j`CY2dVp z$k%zeKx4p{xiKI^12=@I(4+z1I+g+69sLAjz!MA_!tmTmxR)-$2<}TL{6 z%>LgahR6D1%-;6RdQ}9jT*SfRvx+5)Y_`95OyB(z%q244{m-$a^x4J@3DG-rg{iLa z>v*BJnjJp_ydWem1NKnWU##tOBc3e;>)|tPx4k~|Z7gHqNT&hY$Y^kDhsfy?GyLde zw4DTD9IOwweEsaFOW_dg^ndTkcZcHr?AfJ?{dH}MN4cJK@R-qQLc z9X;EdGEjupghx5A_vL!6bX5aDU>O}u7Z%dl@o_Rk1R(|&0D_Jpvhz%ZfIR?u3zNRV z5Jg*2NtQ0zq3xp=lusQ8 z0hll$N;C!oFoxOr5woj%&$gsM+v>=_CRyj{C7}SmX1EgubO)xwg z(gj&PL$jJuEOwdaeyFB?Qa|+hgqx- zOX6Bx^pgDAp)zPcEWS-xIf79iI(!=S(QR=NzWcw~`a**C(5P<_Mt!VrRzu}~4o7RY ze=2MH@Y{ce?-=Ar;qNW8eOU5iH05W;CWsMCn<^Hz0vBMC(~TZO2S`;a>4bA;W{*Kd z-U_AaMJ{h^n|a|p1s>6=%yH#Gufqu#{xx1R045j!a0oElM=&4^wtepL>@)id%P0pl zo^fBo&cX{9S9=Q>0Kl>o{dE@f1CPAr3YhH*n6Pi3o}RL`i-%GN079QT1|b$7L%k_@c5N;87U0DY9-`2l0b3io8bYY^AHVJh0F-MaiflQNCsSL!!?QvZk+Mqe z<6V(iDd&0c@m9fG(85*lI?DM$yjtYRi(6ShWbrc*tpJdq6_{bYe)bfa0eTQH+8_r4 zh|*SQ1%eM;oLm_c)LYo>WjMJZYwqI}>^;DN0Ne-<_h3ATki!hp!-%&Ma=0>KF58-C zd>&Or*hPZuL1rsui5hlB20T4{B#{A!@M>sFgC1Q1zcjn=ALAQ=WdydRBeC=6h-(9| zee5jQmI(cH_oaD;-vph1xz~Luub)QQK7JT2slrmtPv8ALQS(E+j-B`}U}LJ!Fx&rf z^HZ}qSx2mNPCDH6RH}0w5g$Qj`v}QqXlCBM%0g+1FMAV*8_Trz6& z7i`;^v_s^Q!~#0uoS7Xy>~pn79Fj*gCvq&T3yxhczY_=OVHsZ96ZeLXF5Txv)fgH8 zpbx&d*uxhHJ5u67%WpXk_D}kB4kPki0dbb4VgPXSX1NO>rus75&(#GyS7I32Vn_m? z!;ML@fF-}+B83DrSmZioE|zk&kBA-4*`28WReZbLF$iFBfMSO2YW#w(ViU+pda1=$ zQSemofMjVbg78|{!jG!WOcVvo5qa5FMxqLyBGzc;q#K7QUJja(GSt^{xJC9Y=0SR`!d`2@u3{PG8Dy%84IVCtFWzHC`5M5>B?6gIRQya_*Ni* zI_34q;mOVz*8V%`)?j$)h0}r>PFERP+CaGAU*%l`j%*49P0wUxe*0%Xzm<;v>@L^#v38q4bvwq|{)#o*ci~sqRxVu7A1ANE zmKRK(wyMBpklz1YU>ig{a(J>E=v_0q$oes0>-9oB6mbp3^PCt=R6MD_g!ix|7}YRI z#_I!W03_*+)uTB`IsnN01GAYw=dl6|2+q0q<8^k#?4Q?@0gP#T@G}Y| z(Eu!<68ds#L)bX9_+|)TQVpe#G6>ListKl-S{#zgE)zT;37!(M0X*jl>fx6aQyZXw zIUT+9;CZ-}W0WqPlk)Ns)dC9R0FIE6SQW4$BS4cybaXAW0(-C%xC1wvyCzxOf~~+U zxD);wgMzD^Is*_7T7`+q-Svq30X6vm+Yz(D)hCYT-z6Lv z57HGe7?jz+-5mDq%vmsm?vHQoo1K$gv$4qFIWFFsXA`gq>v`3nitbi=zTC!wV#ju0-jh-#&NW<7}UP`xt{Ny#qX3hWmf`|97ETceUt!tEP{^$QIcx=`gecEqUFr@@hDOF2K8BQ z8=$K{5Fk=JM&}PLKnp1W|9F}JX^V`$-$Z*iKWni&t1*la+=P^5aYG#jLV4?bNCdK-&xxxTLw~RsH7a3U-=R6XP1_y{4 zzrvUTUtn$isSE^;_wSm$H!vC;oWh460|D3z&=B4K*0j{olC_8oxWmYR@Qe^+KsFYW zyJ8Ci><@rF0(MS*gdG5yARly7BS7{4*5o!u^&8&TRY>ReV;5SxpAh<&hVA1)a2_CN zG5^?!pK!K+LZiM+&A&8ULZ^RII{xdh_gG-0zR;{F+yuE84j?d}VO=)!+s`_FiOG+F zP6A8*%G!QRWo($d&FrjmIqyQZ0jq7`kfZ_YfH~JJ$Mf1nhFDlHoVOsZmXYWJ#(%I8 z;ee9vp`p}+%Mrr@2NU%C%YD3p=#w#K)`qMct$w^gN(TTbw+b9AFDJ9Z!_WYV3ZCZOQkQONGRU{4EX3uC`N<%SiP9N3i+6O0S92bxq~qx10G_V;KS$O z2fK$NY5Qn8P|TC}FU0t70sGPS zbtK`%Q#n+w5|BCcKA=(G?$MD1>|vbo&B>S`93{}R;vLtmu6l2rA~W~J<_5V!&m zA_Go$;KFww?t6Ehn=`ob%?^%C3XM{_1T}wXZC`nK>01mdu$2o7C_il}t{@OLhCh)y z(k(u<6^4$BSh`*~PbECr4hgcl#k7N$rlWvaOtEw$V1*=&MDfl|vAooy@r~^sDh#uK z3D){j`Wy!mMOzrB6ZFZwy(2{VV;`OMxiW#ryPEam>Ity4l;**Jq*gir2(T!M1OZEM z35@@G;sU4*RDe`ZQkqALQH}x%i4q8-Yw-YpC%`Pcno#2CS#3#x9BR}RvU&^xl7h-= zp#^a)xcaH!d1%&Q?dw*49-0o(ZL;2TX*dr}A5yD~L=?g}T7pI4Ihf9i$H^&PI4a5D z-inX=12en##F)o_!9W0e4_wRx42@}Vn@@=y?7L=VF$FForofiO6gWNn8Q!knnbU)Z zFyMQWFArqn4|e9&6mc&A!tff$d)pXfV4GkpMO3y47J}OD*?pjDe|dNVv-}HCuRoRj z0XX=8vcxP8u8MY`yk}L3?5m^GV{!dE!5$tLTB4QNc=kC55hpb2<7^*BeMcAoEW)

zz>fw7V$`=`t?lb0 z9LK30sv-+70;vLf4sc!)o=WEYW5w{2uNOE8Iy2)tcJlC$sI&LO#S&;xEHh$AZ~%Zm zMvBDtll}n!zDE*6hcrD2k8-jIV|A!ZQ;$#rxwKrSZ}Z#^CbYGC~p_{2!8P3 zfvgQsU7$Ze5J7&-6U!kO3vvJej!oR>M^$T*W778@F#sg_^`d?zjzIu{ zgK`ldc$0{&auPUCK^z5g90kuq(*a&&1^8vsQ4_$FT@`rqoG6Ln9%x1jF@m)=HfhxA zABm?@6fBAi&C!g2oC*T1K*A@MnkM#m$Jn0u$-lv!@IPT6@CgP3UuIf?g^g@_UbIDk zc0>_l3iSHeS#D_=_5h!m)8m(gE8+h3Gps}$%1mBj3UGO#7=y5mD!iK!wFqJixbuA; z84ybw&ZKm(t6+Z}*7CP7dxx4EYJYab$!s9Af9@a{lip(MZZZDD?7tfKzYQA`6q)UF zGoB;af|uW_4Y=)narskN^j|j@7ZHRB71O8NrdZa(&W$`LGQ&;p9h$R;Z)CPVef$=2 z*$-s5$`opTgZj`A-xj>*901H13xJ!Xxf1$LSwbf~2d$no9;K5p`eYPK zAI-j+Nv@G+_2<;K$3FwLt(Wk-7@(r5pqzc2nv&!VZo?3N+_+6LgSdRwf}ol{HygD<2@( z6_>1|a0q0{8I2dZpEa7EYDu>87!5L}0Jrv~E8#J;0!MrA;L>*nRX#+6){o2F**i?>t#;#Oo;X-w z9D+SW2BZPvWVOZR7Iab|t&P9H{s4c&Zg@Me{GY*RenSQYF*hy@<>x{?GwS68Z2-tHAZTva>_HV+KZy9czSXtDn1&_*scfU0e82rv&?q+KK zAD)}(iyf$7PsMPww~hw^3#jG5OR2X~ZUPWBN+`fJU;~H^*d}YqiG}l^2eUz2dx3zY zK@yF^F7p23uw587YUa4VH5jV>;R=WzxmHkKGLT+tG(dn);Eji6ID9dLmfW8DAOK*T z;B#{z?gxu3`p8lQfu;|ilexOqK*(csVj!zAdG7+@&HG68y4*c5Or;d~O8 z2V^6nRTvE}eFdXIMjE_l4&gy?ERhDG70~?$AY*8I;ywm3+|Kw2T7VH~rM=d1ISlEx z(BXb+Uhl&$0zKB{m9MbIZu{~3>$!sg`%l{sMHx5}<3Bc}oyz+`o*85;aO1U%Ul8TFzo zY(oYTA`z>g3rz<)vm}uu1^_cGL&*|=XLirNlLG)9c;(oY14Y7Qd;+aJpJeHyt=YdA z^j8pS7yJY!@7}$WkpV{tIT1PXJpbWPCb<0c27UM*GEz+-rQ8Lu99lOaX#+qHfI694 zyEhRXIgUYq1FD&&H?>)k=dg+%pkVDi1m~$6Nd@q-B8Qv-9FKHac7ex}|L>$itPc^% zMTE*T8V%C^4e#U(o7>D@e}~^)Gh4U-H$r$1&|ZM9gnf(_x(<-M@?upU9rkeHrf3GZ z!OsZ?0t_&;k4S_2*q)gC55SbBkEIK`|J4)i2MBX=kVgir7z5U!v+Ew*7isYK=HPow zekU^f=gxs`2@?X@_V>m9YqL0Z8~;&4#uVV%z8dw7QO6t0pO`NYzL~TARfKLHoa2B> zTSXLXuqBwj-bIHGH9tCj3C{~zxczjx+Lu|s+&_JH<#~{QZPkx2??SEu%Zos&zy{!0 z)CIOdN*kw9Aasj)jH9@c6)Qt5T!nb#MJ#PEoTI>z<&}o8u7n=87y!7+nMVx(?dV9u zM+Z>DUJptD4s9EWH&T9hcco8PEdcv`mT>?eNoV_>BZ*)mV_82)d&#sn>doK=7)p5I zS~UO|rPBkzMW{<7s~9>|%2n;!W-juI5_cp8rDkEwBO}p^H^@QLBHuU-@XLxEat3f3 z^z976)0X2!L{czCi$D>O4tOG#(k<|mp=Kz6=U5?P!H^94K?&uG_s$%{NayIWnf~y^ zBoF@`5om78U?7ECni*UB4_GATJx$Uw(jYe?qE_H&_Xqjy9wK^Q|5!o})Bm5Ea(i4o z!ZN@yq7feNA~GPh2_~&j;-b;=h-&w%nE5Xwkk3VcYujmCHYpq;;@_Ru_Yi~;TkA5W zf|VpZFFXslw!aTG{|ujsmC>^K_2nA~(R%~4{Vix7#^4P4eijzR4yRC~(uMB~{`$1! zpFVhHrf(5ngs~U6_3jc!Nl^3q_{#I(dnhb9+MB2Zjv!Y6ccn{2UtJ2KIEj^^!M~AV zQx&?!r?y(syqa4ElJdym$!;>wbGpdjY*z;XN0yg=y#PEU#y?#Fxdc#X09a50Qv;Cg z2*^yWbXm?bmLMemc+i*0d)7zi`vI^o=Q5(FPZvTm0ALhAUMZlI1pX~xv2HME_ZMo{ z0H9J51Axq|nk(;l8@bk2(PSJVs3@6yHNq^6CSFpKvyXt6kz^%ma()C}wc5;iS(7u8 z%DmO7kPi`I6LLJA8x1BBY4D9PFQ7(#`A;*0g*x2`MJuq(NQ3NfgAY%Ib@&1UXIR4z z`?nD{0FegQ7-cKxG8J5yC!;40s3dhzy9B1d;+GvE$!d zz-C8K{Uer$C6fQ1yuq%W_uu`D0Rv|L@J}YBgy+Q!o1H#4#G?uOx&QZXuF3Gy3G9N#J4P4Rr zlMo0NlS5o$S)aS-2je@MUf{YP;Y4yi(UcXI8iWfJ1UL>7J@~zkm7@G1sHE}I+IE!%)(V234 z;{FifZdb7p(ZSD{QX2Gsth5#xv81Iv?n$dvu$l=MZ60@!vbgeS`)JxY} zU}O8wEp%$|Bpfh2ajLflKsg-y&>s6x093{aH4Yf#_SUdB5Bp{SDmnXD>C@TQ+XH|a zxymJp6hD0bD0i|p?s0C!Pop<63~*Zz0|^04Pk_*ef*iEryxcqm+5~wq$<(quh@os! za0oOnal!M@42jXg&soe&rg<7+9yy&tWFiFrN8&ZWDjB>u$HX?{aGACOVl)V~GXn6; z9=}AS!M~ey?S@INeQOMs2NJpxhN9JV6$|eNLT_OcqAxMVxS8!gz(D{s1N-mcN(dvs zULW$z4xueTWWXhC6O4^=Dyh;oSxLF$Ut3!x2p+U+?!A3%PGPvab9jirJ*UvB56$I; z%hKs{w!b!6!IA=J`yC&!Hue;k9shfT=fx~v0`_2y-ymQQze33()chl8VQ5)hu(pWS z>R!97G*h($EQnQM^eRY5f%0P)*a~V3VoPyBDi)3i4cJCTK~_)NA#%DzXlYiV=_KgP zbjT|d-2XfzoWO+bl49y5^Z-cB)G-(!5LGC#4`o208J8nHiBpAjZir#9Zv|QxpD9XW z|2&x4Crt{MF)E-r9!;DuFJ~eFrs@%sp$SwDWSSMb|6`E=AED4%BwlFDCa_qTy|@LN zuC4CoFS$AxvfS^Y?!StlHE*!c0tL(g^iqo(c%BTw1Ck}D2eO*o!jEIiOcVvo(RtZb zMxqKH5o`2V=1Wn$R2YkH6kaKbQYb%O9pqHD1rc9mkWU!uzBt^bJ0Z8wJ>D_XH-9(g z^$&iW&c9bB2w8P7WT!d*FMx6yAqZ%?^%;3<&#y zAtDhrlGc+2F?G!e(Dm=p&NK6T51TFFof^P@^2;q6_1#2#{);mE56<=*f<$IOUYR9v z7e2=2$8Y-LJ=Y!Zp~ADh0yRH8GZ@DS)C1HAxf zyFypMK$2*H=u4-80RWu^7KRD@hKfnKwr=Ifz8!ClVPCH-#Rh;e0N9)B`hXVtj>7>4 z88T}x=rlnw1DZiH&}^1T4h8_+2SA_70*o|^3pZ|ntrJ0>%#tS0qDZs?Mp1E!#c&fz)LDC5WJ3Zeh{w~dGcbiC{n>s?@y()0Gt0Lr$_P}<5J~J?>mV!_{hwD zdWx6=|ACkS2swNS1A&d}aM)kOLl+z~cN7P2eSZy623HX~;4=w3%#DZ`58&hgQT`Bb zfbNFgRJ4&7q9|bGzn`)3&{Yg*xDgMn`8URJVYCAFcwh5^N{15=qfy`N>2}uf-+hT) z_%K<(cOk)sJPBv}*4n;&F7#H1*f{F!$O=(#m*tN`)JLTY!wPKWqA5p9aT6gThcuar zwryw94v~@kkb9Q(4~0-UK^#=xGUt5G9IU*AV;g`p0Xu^oKu~OI5=EQn7Xq&f#=+Rv zho2Yr@PVX#Jo|irxxWwu$^iw4fc6i}df?@khytMVG<^emoL$%U%)~}x+jbgT4IA5> zG-w-RVl=iIH@4GgVzX`7*lKKjb3gC#{e^2^Ywf*GEjubW7t88RAQUL=k6%o8>Of)} z(Jr|39uWxdNY6`Ho8!-Vk(HrkLgf#yDmhd>pL_K?HWWTSwQ_bmqwP)MVh*wKKz=io zEmfMKXis6R0*pozZ6?72p~=r_)Hr!&gag9oax2tMrZ_svlk8l=7?~f)JYUwh5$@qj z&qq`(xJF!|$;r-Dqy5-5FQYYU;?-JR6;&iBB;8%-?GNiUFRY?SM9+-prXuG>jYR2` zv$G|4rdhm*Cl_*SM;fkTp}R@o*wjY5oy?p+X&VRzm(l zVYbgJJM_dQ0&VClrr|j?Q=CSlt=bAp9TL329o-?}-9?Y{K5tY|p~LrvMT!{!*{?IA zc8W{~nPJr%>8M)x;45ZqW}N`tz%?q`kMN%`ArvrKY2|h+KM4P#p-cwDFctmqnc9zw z8;{G$tbk&G2@Nh*7xZV!F$9n%pXh)<1AU{!CH=|Z1_2ZOW@f8S_Z= zWRB7JLSv5Q7PX;NU&w?~dAO~?4j+#^t4cY{wXGFYZG2xW^!AKuWXk2eTm;IN@_F+N za>l+GfmxzSKa8PsnkWR(R?=C2cN1n!5nB92>>7g42e9-9uVV|_1*%y|7Z(QFnRZia z5Tgpwh3GJ(lmTljtYLC$Nq~~9lr|I@oZ)AGZT1kXS8gJ?qIgIN_ zaJn8L+&1eIx!CjRn#3T1120vqF1N+?|APbaWoKXl$6|} zagqQqm5~eaSgYKqrLZq2u#L&5yK|AIxsmIXe5Q@O>kHxEmujCMD>gz!7=;T*zEt_9 z#9(G=dc_UbKtIo1|EYyu0A=^C{uJK<7@xUFa>$_>{|-rceJ|9l+Hi0XLE-;Gzg<&c z|1hT8j7J{&$y?w4zErZmU^}mS>D{{j;eDPC8pn()I|AWYDZz43uavSA2JUeRpVKS zvAgFOp;ce*=KGNpV@53f7$B>w?7nkjY?i%-Cnmy&R(znUVT30DXgLwktpPGAGUs5> zqVvfB9gX>odL0L+#x1=nMu@dpQ4sDx4U$3bQ$B}-Zps-pxO!QJQSj!cG`)?yW1oNg z#vV4(*m^&WDyp#h9ogGfatL=)iuZpIycnA3q-L+mr`Sg1gy$}hBZmGGlP2a)JD+5c z)CC0;k>7SS7()Na{(^J;anX)p`c1BHqe+6t0UA^!03@|= z;HiW-3A@Un7kLsz8bAnSZ=f+!o`y6Fn4w7!0F1QAvIQO4MI!ulN@RZblW5ck@8stk zLfuELizYb{>W(0%Wq^^WpmZ)N{PhU&0E+87(YYO^2)xN!+Eq-NreOKe1N&(vQKUQX z3$o%YgJ$2IZ8@%~FXjK_B_!UR1r6JJoDmDqJYs<*WzT>oipWk+V1>Rq)H>#2g|Ul2 z!-H{k*Q@J;w;k83cE#Nh$jgm^bShb+prcR>Z)@-5(}LDTxyr-^sRVruq#Rn-1@ z?CWhCKXhX8$UP+L=>;{lw5f@cU&K!_-imyo*L~h-By{HX3loi>xfVPk9yo*ACgKI7 zUIITTW4C0Bz>OI#%mDP|AbTbYu)HmN^VpceVt47faBTd@ z=R(~#MbXqkb4_deINLU_`AfVXX(p!ct*r~t;=R3`-=PS{e1>1(R?tU#dr;S>xhEB% z{E1m4b#m@`QTf*w;)MJ*IQof2@4JS0h~_%j7j`|6+^XjFC`@31dsLhP!Vh-A5_x2J zJJ$npji$RCbp!OzIbXWUw6K{K>GUrgher&{_0U4nER$H0`Ur@F-i5L6I9u~20*xSo zDvdeFJP0fnr11X%x(Gjxl>P&BAHKJQHd=5y@6$U2f~{Z-F82!NU328j3a=O%6D9M`xQ+>+<58TcEX>MEAD9{Yc_+0Bg$Akt^52&rT~88(K?LyT2weRDP9dP zEU?vj(5de^#XT<~Xa?DwD#06zs#xKoCiy;4v*9?jmdO9Ebh@5;I=*i24W;{OF(6%8 z$>X_!I{vid%!gASBir^%b3>^hvN+)?m7L1_XNI*fV}us>S-kEaZBgeq?o=Uuj?>9s z(tTdG>e$h7P=!(oA2t2Z9=j$C>MGT`3V_HcMK;LY^eRX`r=pg>X^sh}`b3j0ApVq~ zVEYx>&UN9z6D~mtqVF9Hl3{uU?n>U}a`>A@9HHpDbjGo^$U0JDqP%YUWspC=upL|s zxRsmieS+8nU`|!-_#AdG7CE5qfB!^EPL3V?M?6LVFN#JHVTb}>r-{xPkPYiOk{pHd zh5w2Ix(3Ibjzna9VBCeo4B+z#R#VzP9B(!_e-s~ zbdvQ93?D!Bg|`4rpyoYZ7|sBiK4F2ODSSJq2xQdGBpLlKwP3_vILdzhQk;q1W=l%m z?Kf3^Sd4oztp(|c=zl1skI(FXVttf9p&zr@3aR~=sPa>5E}{0)5d0VLs`oP8QyJe-IaO)u~7?G<*uSY+J-d&C}eeivPt z)HIY`NY=cCgJ?a^k`O6h(>_mFCjDohed3tM+l`Ju2Hj_7ft^IP9y#DaM`P0ZkMHmT zxYW24^hVgt-_SX>YC5UYLmpAn3HDLOMdczg@Zp8X7 zmOSP|1e`kX-=-H}&9`o3f`)c>l5<1`h9{25Lsc|E?uaXYHn`ZagQJNoLLZvm!OK3E%oL`$n8ZP1!{ z5^dBIoB_kEvfnZ!w)}_RtqJ!3Ri9 zGS<;HMS3-cDjGg8mj71reRM&EdLSLhU6kNuwZHGm9OXk1RI#NOXEpr@`lyw3eZ61R zX*8*<+Fg*3DkfJr{)b)eyx251sf zxu3u0%!5|JImKtZe14D^R`OpW!1JM)Yn0rjJhe&Y|LRb?b-s+CZr(w)7_+=zMD}w8 zo8Ef#7r~S?b0dnZF7MKGIh(_)YC;9|1YiaA2fhZq65(Rjc~o}Gmk?LAun#{B2o#BA zxSg=H)xP=4^<|i&8jepE13p|*w9EZSN{;hd)1*#SW-%uP)wqtg;i5UK+~E#S|+ zdjIEK@grJr%s48-NABPa%t<^7&k><>7dY2Ysjsd~$K=CvZ{BP#d2P8ixI$%@ubWux zqY_N|t*Ga{iTO(#dxv1x8`)-j04cZTHS^C6ocYBIy7$HG zCRjOjQKKtz;h`CQ@;1m9*QsbGaxq*{0z))^3F4Ue7empb992LOpQ=l|KPCtL0m=t$ zG4xgxO9=vqi_zpvk>qnLid-pp$P_+$fFwD&81oz?x*9={g)$<-(Q>hTLwk;`pG4l= zV&pV(y-4{@ATg2wG;T{_hxx-v*^=HurG>g#TRvA10!uE@>Y*xNo;{9Fo|%6DMYnC> zyKl(8LkFB;N9>4x$Y&Qr7-IE7NR-=v(cXdC_dBxdr2a9x?(i?hhpw& z1&-WLkDS_c-i3k3o~e$_gb?)xX_q#VuYPcEki$RqDg_LZU|tq*Q*{D%1_rK&HrGZ* z0?Z5jd^2-izkWK-`S4@(_wi{50hPc#_yImyws~{u|B$61>dK8y21?RVE_xtv+vboR z9g14Imj{SqFfSaa`irz-jY}?wSIo3sNQs1+a8?CKz-$39Xqb-(W-QxtbQre8hy%Kb zfft2dL3;=CsdA0)GB>_e;Kx<@RQ>_hlMDtU(ZLpbO5UU4J_mma9yn&9rNq2EI(eziZg9jYD(5iNq_@zDrw z8w0>fR_d0mm%l8Kj1hstXaccyN*b6iLKXaW&Sd6=vQZgy3iLvl`J=fCe5dL#QsV6N z%}!Si7un$L*MLs?L<Mdm`5z#TL$C;^u5vu8EMLD-@3do!KW>1$<~I6_89tBE#I<# z=5$b5YlNsG>k?@P%EQFF?X0E&+$UN|c0AL+&wt^DF>QL>wK|I2+~OQq#<0mVWs4-; zs9oG|s5iWpXV1W4T0wW95;9tDI?u$4U*rqa=Yqn(uG?Scd%lRWc6WwW1KW_+6!4&W zP6kt_z#3!?;&Wnj58Dh$u4yjd@KH-0g^+q;KNrR()qqP!LS^s#rz}z2KdPYw^u?pr zYyEu5e6mXJg41mGP$S-2>x^9*|6t6E_7P>1C9?*d1QG>cO8m#y&;aTV7C^%+S0*0v zjm>W-&fP;)NXrm{Ogp!+w5i>aiCrz73c=p4`-AL1nL;^@&_w#8B*ljKv9d+wYFtT| z=Jzb=I?P^@4LePa{Y&sYZxU7Tb)Oe8O2(Z8+5V`}SW_`aQg1=)DUN=!U09V%jB`WJ zB;vaK;U9&+y&3Q2nGL9eLJqZYBNQW6QbfrWn-O=9Td^XZazt2G;69s4;&`>O)q^e- zTy2agH@A@-zopX5*!bo<`A(FwTuWBzCVHUNJ*sGJA!+KEQYH=lO#7}GPJ;1N!eD$l z6wY$R;-Vbh;yP9^)Z$Tu&HrkvShgT=MpNtvHT8xY3ECnN>$;fxqkQbxuk(ex;BWA>dj5z}@V^HIuFfDuPvr5THq# z^MUW13uGCTk6=+!CoIQ__4rS^k{wACQnnEjGwGQ4PXddf=3%j?qiDI}ZD|cHd%I0N z{H9AzEUAam%&zu6S=Q0U0iF9`O5Z1*`@8muz;3c@;(zJ#{-4qBoPvCT| zG%Cp`@)`z@b}Zd`&)d&`vJ`7={mS3coXwCY`xT=A4UCZ}C~NEf-d&GRC3>xAEH0G~ z6jOXC`yO4^U8B?~q&jZ54EK}InQ2E206F`DNF2$7RuG2MN7DriP&e&O>Lkmmz7UO%ZtI&aIK-L8yRcId^#B%WhPwc`{EC0a`Ok4F;6^H$tHhe*y#hQ_ORlX@8P_Gb=j^-%zpus zMpg060nXH3*RkJqP|8#`|H_H~ZBCz)LR>K-qqw~N<7_EK=1Y=#RQBEOJ=JhKDjYl#ep8-R0r}VIuiH3r4jUzok<)=X{ zr~C~qvi2ypBZiqwj!knkePBX;Bz~_aaeI%{W@?!tbC!T&M^x?IpHP7W18gd6rrRX@ zk7d_Yp4oCAc56E(N*U)sdNG?>W|m)`R`h{oX~<09#y<8)TTt`jRfwPNMs6e8oJlA8 zOA7UuS@-pt{-GjuZB>S>CWmvN!D%_v6Ha57*`deTDjzA~qEf(y{>*{$Z@L|{|9suv z{gn|`eG=t!igo)`?5t+6JulOUzjp0RjiAI*s$RblLrK!WcJZsMHV`nrp5A~C^nGM> zkwg)Svgx_BW3)!Ej`pZji5lo>#s|vIv#o6ca;Xt#Xoq_vvQOAQDovmnqgz~Fx#O3< zqZmM^K*BMgWapGlm!5#MiE#;`Vg+MOSr1+{gZ&7j0bNM*trseCDN-cpbFN%1V%Uj2 z)Nx-ZUzsOuu0M+Iz@&Yy#ROY z4Br@;uV}-VlCxemVDm1)gJ)cPWZIaGSD2TTD?yh*VJ3)=YCxIIB!yDip+s(V^q($@ z>qshWOR;H=YymCf6XQc+k~JO|l^q@D`Kh1v963_t1zwLUS9|xvSzMS~Xza7w|WXe#*d;HS@srz7E*W``u zagvWmb8@5)qpU~JoHtxjK<6P$aH499sfq4i{w+))AI^JFKXjY_(o&=TIl?s5in*WilfwQGrTKzg;|QtM>2#ve>TeyUA)@Sp%kwaz(>OI zggiZYntEx3E&tR)A=I6AR8vR^(qBCK2RDwRk@D8w7UH9unBI@F>}4VR|By?VVwF3f z4uMFQ#g_WmSQT~m|N2ppiUQKeg~EbhZMzgUJ?U!e+ul0yzv1~)~Ug+<`CD@dX;=o;lVO4=Q+AUXs&kNvZiSFq~!71y{W~P&f zfj)5K_ZnZgTwAkL8HwQl{HmulCcZ0?yoFS|<&XVNBIV(T;`ovMW!(32o1HzrH>AxmQ@pd9&uUzVB0ePxw zeju9AYG8c$#G?Q3Tfpg<9^>cD(en3n8wiB3Mc&z`h^~Y_gKZ-_=&ef_{-N(pKiIdY z3Ito5)K2X|0+8hphq{PwA$!FseWa$9VSQI;FwPAsZ4D(c-<*Le|~6;(13TvrNqFb(t8uN z-7hWhI?*WvXB=XQBd)42HjH-JA)j9{jh~5+`vl&76@bui-8GVOoyg1-Zj0u&IWx9k zV>kIMl4OXWp8*H(NAhUfu;a+4D9xL#Yd>2`k# zqd=DSSs#ohgp3K@`4^W}lNAb=shYxgkv$lKVvcl`A*wv7>UC8G?^;yc&DafR$)SQY zdx*%7b^rS5ibxdTo?Us=FFt9xqDq%bzeTZY$>61SAN&MS8R1s0BzrC*LidN9@x4=+ z^U&*Ad-Y3p@FBdcfSDs3v0`aV6YUc~J9d^s4Pktk@?t^$ps6U*d^ZLYP>Cn8ChN8U zRfjufYf)O*n;I@kmMNkHHmm4ps9TljRQ(oVJ?<@^^>9fEU8?*8B6OX9!gNpK7wop5 zl#uO)#;3zB9XBd0<9iupoG)m^K6Zb zE1Y4?0M|Ygw1bDEjxBOTYpuPvc_lnZuQ?SWh!3|e25|9oD%FbZ!(Zsq%5XMw;Z`Zb z@fk{_MB@1Vw>1@2K%G7iLh;*h@eWCm*irSbSS18Ef$jr$p~+UFj$Hf}f)L}w*I`yA z#GM?SAqdgzmTsr0`?9R?N`xjQ(rZjlKQQJo&J=R<$d3M{mFvE5aq42Vb=GdI5iYas zxfQX}YwA|`T*9yqOsN3u-)N1{xeIQDt+3+h>gPNhU}pQX4t@IQB9s~wjtg18xpnzu z7xGS_F$}9Vh0ih&=g1QR47gtJ?mr`GJS!q|?M01NsK4PD@9|AI{Tq;V^S0*+61+=x z(vaUcbVZhoiZ_mNu8y0u9I^O>mGeFYpR(6?!>wJ6%R5*HXOZdpT<)C+um<(uq+*Sn zKdG72+ih39deQe6?nDHs+$l{+d|NHs*o@SF*CLtZUxo@NWD|3z$f#_NFDrexH7ZA! z0n8?9c{ohtFV&9C#@xeG5gO0sYy(=gg5ED2!)`gvbc$)4X3jDD8S3_$07v^aO}TuM z7Zm-c9sxFaT6wsg6WWBxgfsJa+{X0WdU=A}vT`4AoEdfohi-++N&uf#v%ya^IlH)=E)#d6(96?}ZqSNgY54}F4X#VkOF<3ge{ z;@54i)s004ehf}iB#v=<1( z?~Np&k+9VY)#7doC%zvhY`Ez8i%5B5GAHK(>})5Dj~pDFLLQ0~!atYj8kO&PW+3(R z;>g~v0JNa^FuEpDd)w>z{y5Q4JPYc78Vsw8KMiWvJC0;NH*7&ht-{7L(#NUpMDi(Q zYPO!(U$dcy(3C3ruF0@pwzO5FE7J|;eF!Z{H)^bt7lgfcYj9l9jJDNLV}nTyI-Eyq z>{(^L%X}qFpw&2m&A@S<#;V02D%4KgGAq}&zy`S5Tv?L1%ZojMG`R6Nn)>BH@@ao- zSztaPfR)|37s+XC$XkFombgnaZ3D_1szoz3Q&S-G$NXP%AASNBMlbrD1YP>7Z?=uz zCI5W^)kAo@;-s(Ex)|{xzr=;D!%u770va!yRD~&IHLaOdPvZ;(q*upGGutQJa;&Gr z()Nk?ptlW&vI#!pRVV5hYU4e#h~}qX3QMxKPj}pr)tl)tFB0f=gFrv#`}*^`e{MEg z*wX(@!(M=YqqU-R2m5{18>nwDk!sg$i|lF(;G615g_^J$pN^OA%?eV$R`|gRuW3DN z?kv4QX$2TUkA@c{=WjnB{M=GpI6>Z`Vt=4E9E6@UwArM2nR&SL7mN%!e(wxFLQGrGT9Trs%c zMON9O3Y1i(^`K}GSPREA7bq1ghwJVb0S%IxQhTMNY({gF*T9s+63;EHOD1GwKO>a* zB9;J>VO%-ZE28KlgLkXPL}sxMA4wr!+3v19`CS@n=iQ>J-8aYGJCo6Lin~8k+GXOG ztB;--0*cWndFmfTngI}+SElISM zQFdo)iELKmPl2Jg?COF870_S%OH*@KRq92(M*EHJd4UNS;$4xcctjX9R5Q8shB~|@ z(DZMvI}HM<&pF`8Aq4u$ORmFY9go&FwkOTw&mCvjtF9172^aw24JuV< z+qBaI$6q;n9clg0KGRu>&8-kL|V-5B*ziNx-Y*0}(xM)H7STMyL$?769 z@h(9~etYZHE>%zy$h5b&2i}(0(~-rsWT~AY%Rl_MO>`F1*yaeLYX)MYc1tYEoJs-9 z&@nJVSqKspz~-uZ>%q8O$I1`~Yo;QxAMusJzl^Fe3p#fHgG}MvfuK8-fSmfYLMEyM z```MW3|kX4*;~h{oHy7{ z_pCxV@r^G(C^!1w@DRUdWNNVwn`_VLhVve@C@q8DGI{N|B2AqHA@0z(8&7=_vwn1n zF+>7Ph4@^X{xewAOyDbRL4o=xE28bvXNjK7*w+iADheo30?y;#SGT8_RV8`|D_l%c zq)x1ObukYhI2hMLC3-3%gQMW%NbM7fVc-H&RD>W{2h`$jtVkDj>{;4#9W=H5Vk#!k4^z>vQp+6hbAQ<#xb zGv-Di_)=OnVH@;2bm(`t?Gw{)G2_z^G4x55b$_?bZv(rGuT>~#9`z_iO@!)WOX9}& z2jYwzet%c?!Fjru&HIMjJ3n;)AqVv~A<>rvl8=o`5z)6OCNHq=p5ztu3qOT%yLSI% zuLL}GL#q2}#6Fi)WW`&*@z|cVa@cO0t>bJ<)H2trd$b^k4lCaVPPZ<j&jdm~&^2cl&zJl^$&RlGwnv(S-j zK?2D1ODzku`T3usTsWc~2VLO_8_!{1CV$=aEX!CS*mT1I^h2+9=-Hm2p4ON_o@+u2vue0u*#9e7o~ZBeSg$z zsgqVgoJ+{zM{IJBUCt@vwYDZjRDARBt}NsILD_j}N{qI>!uhOOm=lTZW6s4mIMD9h zxO0LQXkoziN!N&m=O%nnLDUbI@px5sr7kAFj{4!;h-}R}BQ_5@1?WI%SeD$i>Q2Ci zTommuJy%!G*|Gq$xY!(ZYseJ$u@PLKNx`(8{oRii*VUYvnT;Qn-0cIf;zL;B{ys3R zb&U_z$z}LmF_BuF=k*KpZ%m6%9C%AQy@{cTe2@chqx$T}!#sUVG$f{D46gJOIOdTH zmKc?Ma704N#W4Pe_q6;j;@8j1wABSrm7nJ^UU1o?;!Z~*)hF}grY=vZaEb#G@M#H3 z6%U`&Gkp{TaWTmXa&m?8o{^+lQtd4N-z;LAC8|XxroiM+-1weefJh8LIjh(nLJJ!< zC&bwcc;1CZ*NN)tHQHK%4{?v-SP=fIvyT4wZ&5Aj`4L|so?8oDAd%U;3tHO_ zWXHhqaQ!T_6kb*JIorT?Up+gne7P!Ow?H?Vh@9 zhOJjv%tcKhVzqP44*Dbviq7*bD5f{^T8BFy@_e6!*Xmyut;A!2lt`D?ai#+eT(t8R z@LBxj=l{?~35n%J9*xqAcYz5BDm77m}e? z@*B~!4S1hOT@GR;emsE+iAMoezIfBq=$*XnXRr7pZhgr%r2Y889LQD!3B9HZ2(@ry z*QQd#ai2xW_hp*@CJQA_K&Vx#==_C5T2M|U{>3b_2p*emWNj!ORE`~&10(YUy7W!Y zA#`5Kbm1C*nC%nH3^Z#12G@~<1N9pxY-V=M&>+B!>X_nQ?Vk2NO1H5#33SU&vD z5ff-9r8b^HA9-Z>MM~oQ21q(Fz+iNby#=owC_O!k2#Ndon0OAS%pB%${T04j78L$a zPz5%u%k99C@l-XOYEp zGk6`|X$t(uW_($*A)m29q9!`0XZ*GS%HY;bh?TYhR06isT^hc-oY^2vS-y$!v_;Wq z$RU!w;Z~BJKX790pTpbzZQb3 z&qfN7y7N*ZqZ|2%E*9LeJ>fPyXYa`UMAfD~awdF8DMj8b zD8DJF+<0JBak~#FGsn+a`{{nEQ#*Nk@k*r_kN(JYa!fvybT2B{ZXzr3X6q2i{a_hI z0%!UP<2btCd7;LC%0)pV}9WaepQ3e89&bX5E$p9}RF3ImyTT zs1WBU6u&_JM9J+x8xdKkP$BY5jl((zo|5cff=n?z&`5H1;wJ}cNfm4bHJ7{xML8fG z42$;rP{GrSHWQPtq{nXxAf=X07Ueg`vU@`I&pz$95H00guzNC5+iW!Oy|RuTKnsW* zZW`Q6gcv~9ZxmyW^i66S{zPdKk=1>YGRW28B|`kBtBA4jb=Qe#W|GE~D3EVd zex1W+ThG;hTk^;k@!sNNDkZyE?_23o_p}5c2g`M=#1os~CL_uY=I7fUQ68j;h5>kB%zFZAq>$&11eL2{=#we);s|@T{CM$h7t!P#83#KVuSj7LI zcCkIi;gl*(2$9gj(&Yb$dgTRYRqE-~1G8QskM?wRephLejGJWI3Ur?pZAcQ-V*z$r z%+)H0OGxD1%`bdg>jUlGoKN@i0FMT#>UiMIiD{D4Dgm5=3`WS3*yPRaf!yIkrk9+7 zqv5>DKSK9`8xmC*F)3vgNf^~OzbgJIONJRmZ(+y$tspWLC18Qb$o!|dsPaG71nGaL zlL?T@hvaCI88I<(dI7UA?N0^z;&s51&h!u$YW9bRWs9Ybzbg_U=bgxtu!RW`RZ9VN zr^O;NeFSL(yMev5uA3rn=NxebgH&VKo*Acv-~NDm_}5W2bO&q`BCrVm#dMLmy>Xfj z^6)hO+)a{zgTJ!05x|# zM|ll&MPvn%3gx3HQ~yQrmM+MVkhGHTBy4b$GVmXDPR0ti(Ghfz5N`d-R-G~@K#m5* z%b5GnTTT~BxCn1qXgE6hXQnFk(S-y?HR6LSxr?P1rp4K6_(Zla^gO)Hw9>GP=&@H5^m3g2%u3}rgnN&pw)^W&$M`?G+oNs}NP8=8xQ_1<`F;`7<@ zIm{5zr0IgA4m#t(zeozW&pzbR@>7%mBO=SVw+9agKCcIDfxCTI+5w!Q7Zol?>yb?{ zQ~ZPNXJGCJp?mm!tPQ@tQ7l*blq)1x7HSiea^!>Z(3AzWZh@tnjUdGCwWkHb7e#aYVtz0I?uny88{K#WXl-W9c2QiI5t?^j1!7}|8lY0U%g}M3%s%jE;O`eSvf6dqo*=AT;F2J=` z;zD3I?*^{%4To{uoy=ebRI6R~wcmxS9|xAwWBn@*m1r!e3dBaMKjZRm!w*o!HIu-d zhTWB*`8@QNp9qvn`645V&Yp?@sUbrg8cQ%mj*CW11+Y*W(@Pikj*2bXKSQ>oEM|o6 zPoiZxPu8Iw16Z}PW{vh|3@S!2Qi4n>p&(ly-z)Yb%Avd$VW}{U8JI>5ghhQBMjqEZ znx^#B!18NF!xK5fPp}Z1JvWhF*2o}AE2Mf=AHEU{Bl580m}lvN9H0WI@DtBcUn{xk zq=sg!VD|p1=OGOs)TP8ThZBrZehw zQE~r7bV?Vc=WPmW(jX$Nyz;{?UmI|Q?JQU@vV#~jX*l%_4rl(XFq!7#M3a_b61=M= zxhGx>4|qbbdt$6_oj&gzt~DPeY&^ZlM)|uC74a_Da<9Z-5%VQo7t|c zT=dqIvg2BG#_ko+f~(QB0j=L~sct1d6WPyjK3TkQNMryGE4;3;YXa{mXz#I?4|!id z&la5Q3@YjZZ{O&RLF$k3ge|i^85VaE($>(x_KzInD}G7SfRtruLV-u)3!7u`MmWQ$ zad_z+AdYqWV&GwYYe0qw15>;^V^YT8@Jf<46iJOmP~cR+J4bn>5s9ca|NdH<*c`b9 zlw2B#5M=*NOs(~|y@oSFldAK9$Z4EMwzfR=vTIfU7ivA&S^ajnZ_GxU0>roq|NRuLTTZ7ezk+4JeU8(oRFfA?6AbixP z_CU`9Vo=2jSel#D3fR7PLqXJb1}Z`UG&)8=I)Lu8;dr0yg@;`OB0YQ_J#5cH@n`}o zzzAJ{K=Hnw0+L51elGT}oku9)sxUp04IMX;r5quHaCP{*dd_H;O*%qU4@-D@A^}T+ zoXR)6fr@Bb^8Zm#TG$8;bmw>m&53LWN-Kug8yjH;;&x5AgNAWygXnoG&oD%Apvd!q zzg46X!9?#p=^z6FVYlU1ghqbElLrcUe{~BR%p&n;8dSfL!M3Sz&%?{yCWP=nuzVFb z8&V199YZ;CcYh(|K{6D$U_+3&rE!AZ_+K61{DvG*i1O3CDa>T|cz6yl&P>ow^XM{QySPJ(i96Xo0)X=*A z!eU8c?D!bjHVm(5bEL{=RjC*%FjQ@q`{wUiX=;NAiO=^w zs?_NpvA{W4WN?^6MTF3H#oX2q?B2XB5de9y7b~90{A$^u?}zuwPbuj6JOE_P^%mU0~PdJXc+P~_^ve9#GsQr70*n7?R z_J9a&_j6H3aiMCwkv&RXq+FMGZ7eu{IHeXM$ae7)`J?x(uEob`+^6~k<^|^eTU(Hc z{(KMMuxtrDQWie9YFX!n)m#Rn>qs`M7SRa|HVi#52|=SYaTYqKgi^*Oo2*g(T3fv? z;-RaTgoVbmz4qSMdXiDc7!{8m{{bVzn%$QhGanE!s$_R?b;$bK= zqVoaB#2J!p$8EpeUlmfnb+)IxCK_|F<%S|63atQ$As;A@=mh!Uw}6b;QaG#fQ5jy%Z{rzLhj_zYAp5!c>@eX~xJM%+Zo3U(^}0 zwm(!^@D{F?#9~1EtON-&%4%&^fO4(d?gpnXF@FmI5&zkX!YuWZt2I+_8KhHbqQ#pS zT{<%n1^@hg!K;x5D8|R|Ht|-w;XCTV^{?wRJdmW))<+fwM*q={Xa*!xO!F`6+wlJ)1l;yC;14Ry#W)Bp$1_^IjtUz(`n%d^wi9KVRLZIo5Vv@c45xR*y1H z{yxDw<3}YCm=SX>c^}P~-fAqdw^nS$6T84oB4{GOmjof5b&Kxg`Sl6>Y}+3FtWXGS zZ_(K z{PR*)Nczx@1m-qB$qjiwKAd5D>pJ+j3S62pLVCfSZV^L|bV;SP?!?v`XK@hG+pS-P z=-=(s*lG4r-saOCNDohJ8ralsIoA_>|717Sk<)eeuxu;vET%>wn_=n0k)lMZY$2w! zBFR+)s?y^K66AQWV?$Nfg6$BN%oT^74mwXi2CGPRYOGaywrC!3eEV1Z)8Oh8EJOe>zUq+tZ?%&bO zCW$baw;?KA;Nqe2USSJb>lL~wMHlV>bx91Z#KDBGq!PO~EI-dIp20>+3}PzNql2>HHTd8bE? z?PDn}UhU@UFz(E7&ZAzx#S^HZKI4ymmThOq=E7aWh1r`>wg}~-N8QMEt#%@CGn&x@ zaJw+LS1YtU>G6H164eC5{x=e8@HLB$AGIEYoU>9vj?v1pu=wt0PP&D4ldmiV6vLlZ$2GGADI8x&j)=Zw}*s#{W+ztjn^eqb3$e!)O2B5&j?z%II_Cpb4o0KmlAK zKq`lDtswky?!s?~fkiqPmH=?|hDP^M8YN0nsuO>}iZ@wvh+8L&EOA$A&SSEKubhQ& zJdCFr0U)2A6(ax5?s?RE9GQCnPca4jo5DAkbD}0b6ZR#05kP7101OR0lrs%wY{O=p zNCf{6Awk~0QnWx~l@~7n&*E8d6pvRgzlfYFz88-KL#a-)wb-ozLwucb(&KC&167ZM zRW;ks&R|dfG%fit+m{pgYOk9^Bz{X4ni}22$^rvFeD`?}kA&!b`T!qvM(Tq+H0q=8 zzVE$KqTXx0f4v~@t+3*awn^l_<1qfaa2109r?2sZ2pzJ2FH49=b@uP#MB2vw1R7le z$IlQ#`1^<1;0#VwObmd%0|=Xoh4((c<^Z1X2QqdRyELwzp#p};-!1?B|7{1-fm#<*P68yG;-EbAI zIA~PpQzRcX7=sm51UQiRG+j!qqMHZDLM9eyr4-cun2AIKuLf4XG2~39ULU(7ikFub z251KHV$49(vg>F~A_^FgQ^jUA^Xyp8_BrUwY#+y}9)U3xm-vrgt@idAtViip?NB1mjhzIh}oe*yv-3NueVznY{0cm5cqEuE{nIDA~ zq!68Yt^}}uVUkPB|K2ggq$epQ=X9%JqmFU^d8kj$?+o>YAbg~4#KFuM0lyJN@Vji` zi(8nj!nZD#@Vk{`f-jxI%FDCJF~Jp)pj^sC8wfznYSnJ8R~pz4DW%Tzs`j>%HC{pak?0hcV&+|NHPD;28vy`-n|(ue23l zv_UZ#q%r_^NBQuw3AHwnkhf@B!JK?Ioc5Ox)4$1QGzIm^VAa;MHF;|{bvWLs49%Km zNrF@jp$1#Kse$Q@S$Nfg(A7r@HaUy|zyLtKMJzi-Qa&DL!yyA<5HwUW%Yuowg z`TFGb7m01jd`H2qC!T`YUkDcY8l0UG|j!*~JB# z1&?p0qXdvilKo7)K$ru*4E!X3SMLA}`i^3snBjSkU3B*LlTuLBZi#O{3`Qp}o@T|; z_hQ&rtYMoehc!Qg_Auxa2j3cN-ca6I(r$2P;Wx#haz)RG!HruoI81Ah^F2RAG2BKF zpL`Ab@HBR-^+650x{0)ns{k|xypMSM51wWFzWC5bpjO5i^59eKYd?G`#(=cI-;?BP z>uw0A=uvFgG4!BBl`#ciPxAO_HblF6|8P5-b+L%Z-3(o(IqUUaRBUMsw=Xz~@c2G}SMyOR98 z%(PG&Vk03R#B<>6TSp0CRVy-4ph`{-xcD#o`W*b}BsvdE)>C+%r#~nS`WVYW4yI8Y z6^;xvX}k5_xhAUhB);PD5=XzCDcpcwT|)YNW6#j-jOm3Q$$B z7zTtiD3n!zkFH_BfpQf~;5op+IKm)FW5D<^!4)B8t70_hR~38@yQCn!iinaka9Ut7 zVIB2JHk%3+Vy_nK%h~X65M1cL!+U_+0}MI*=_Rr5ZuGfDYUZri3SdRxa||B0a6~cV z3h+RpAF5RWe28TWLk$PHf@&?ddRkSAq7~-bW;((zD&Z3#f@tXa$<#^}whLlP2Bn#T zQ$cF&N+4UXN%9sfjiI@^(?5qXj-9A%D1%K1@A&8~441JA5E} zy~_U|dGFXQF#s^GbBrfTO|}A1>@Qse@C_~B2oCxHq~>5;0Udh)!~z(v?@aQ|g*jMz z1yaE!jWsN3#1dBkXb8CS7#z_%Aw?lZ!_?WmYYI)qelDgkm6-_%ME{U@d#wa;I|j>E zIC2W-$nXWG`yQ6~Ph88gQyBOWrZ>Y`4v{!ePOm09gVjv-4}$kRiSI3DKaUWemxuB& zXpgvzqI>s48Q}-7_4`8N%80}xsUdC$Trb&f_~Jc*k*9xyk^itJol1B{!#fXU-<}cY z>_MQ0+Gtm;wtmAe1oZt8&l7+>!2C5RB8k+$bW)=3F)n|Prw?Kly*H^_|8?h?ppRFL z+XKBt%;bi6i=cdte}h0vUn5`=f(s3x2#B2kX6>cTNp}g77}$2`UqDcEt*8UT{>RoJuHL1d(^ZX4K_<=mKl=_+#X|$l8Ey6iizXshR>+Il|(90k8Vr zz6IEjV4O1wmj%NtUq1kI`M$l!?3pPe_cidgtnASrWr1z^dt&{08-O>%uwGrNO)(%^V9AFf8Us#VVb=TY{cP?M zmb__D8A-LsfUr`Mlko_zMJZLC+w7cf#PtX@oq6-#CsZrmaAZ1BtRV%pm(v+@T0C z(2#f$R87+s)|im4`DS<_rr-iQy$$A6)*yhVLRc$eK#oLpjcQw2iPWGQK}HqlTTB5d z%S!&mM5@?Iez|$IMvT92e^^R>z_Ma4g2^C{O$2gk2`>xXReA zgFlS_a-@P|yiM2rC5x6oU=r~BFUzYf0Muh!YP`NV%-3w9jXXZ)v;m-1@*sF706G#1 zK*5**G(ij>FVG-AYk~Ge@&Vcmh-7{!c10pDcnO%jtaerdqU>2Ivwb{X?m06*kC*iX zj5|)G#9aLIyVA|DXcE59$GY z==L4WdRwsM<{;GdL(d;WEolM!#gnRH87n>2!6Kvj1?Ywl6<35!vB7Tvia9pC>i)e1`XyDygvKMK`_)PT?zf8lS}Ghd)1N zIx?HZ(Z6X`+Yz$SV5i;?R6w`hx+h5Exv`)Hu0>}0;f&ydq{RKlN=yI4kMUgi(Xjb6 z1cA<6TI=UvbmC*GEd~9EJ&}CFA7)j@V3+8Uy+;k9SLip2Uhv=iZ7|S5mMRNfg(UR!hiS* z#}ogM4L(4WLD)qMetfNrGDusMy-K!tSS8{Nvv=jBxD*c7wxLMlH^o%}xD^)bbQy;t z&Ful&3;1FSNIxl2ZD2rH1q)O+iWB4vyvV>iWe`A2R2zCqDnO_5w}^e;wQ@tSAAp?2j=VBfpI4h6LW6EMxm|j5Y>am%|`vg8%xPt#Q>G z3_!(U1dZ8vR#G<)Kmiih;B!h40$%I^Cb;f#H5;*qNg8I+WS0B+{Et~CE$E6x4EhL0 zQd;p}!mI}SR2Xno&nX|q9?GPo_%hIq53YOpgL~M^L=-t3$15=-XwQ9=$rlwa=u_ikR#vXiGl-KjVCijQu5`Z61S z{{YVo&o%LpamDeFYk+X3OUv_}-+rGhdpshzv zMURq+SCR<&#`I?#dN#O*b4YRzEzzaUW zCYQ2AM@Vay9RjVDQ${AQoGerTftvo&VlUnltdS$0ne9UxB;aVQR?e6T&HL;8^{_ z$bdM~lMx0dk6vJj|Eh!ByyYP{gU_#IqhEdng$DI_tR|JBo7-qc#qa`Em3+UWa20Z+ zjb5V8`$ED2fkX88E>j6$ltC&2h?}7WVI9RLjt?i6Bb> zDVxQ%m=qh|P;n?E07kXahCfC|m~kX?Or|3}5h^0;qB{6aZ8dJTZuY1Gt31|17Hpf4LV=05XIz zAO*PlcKils0_?zDM%EaVxP9gJ!3Y6?IJ@h~F|T%QmFJ6xCFpDp9hJk(mQx0DX#2t_ z$tVsh0|`})2N(c-zr}2DM9#L%xs8H%LzekD>%XE`&MsD})9tf?WRRz$8|oJux~QZ zOAL6z^8v>HFJwb>LJ43KLkQJTCMJpzOsMRl1dvXY9_nj-QT2h3e@s52;Va8n0&@Pq zHr8`C5asV5@S*=Tjwb%_LN17`?7gN9W1^? zYyqB5co#-z+$!MdgkUe*1KcLicd3mM&{eKf-z&Y^GtdTUrE{&pI(6=C7g!fJ_Tqr9 zJ%$wAUgf73_8GnXwg%iFDr2LJkuQcl{N}Yf1(0yH z^e@>IZ_rvlnOhQL;P0Dh_npW{fv&9z~%iXcZP!q1idjV~l3;2@*`P&B#% z^8eZs+)zAFZ2Q9|z9vfM6^4b4eo!o_(uw`FFp*PoUVahWD4r5iAd8L`DTq}ieI-lC z7(_7ON*^x3uHy97a<(s4{KxP{@@iv&UHBegj~`3^;?obK zKJnd8ee{%fE4~C$1WSI+vMNYNDpyC6KXV#Z3=HjpQe z-^TDZT>r2IP{=Yn30X+Ys#qR$Z;=-VMEG-@E5sOZ@h`r}2B#Coi5PGOA3~A2ekPmT zd4$0Sgnb5RZRPXIWw!u?x_m2=^gz1?qk^)~lWMR|JyE$qiYZbL2NCha#9|Wx(xA9a zzIuRzo)Bda%F+Nw6Zg*@!>pZJgYt7|b-h(_l^m`;7!LMuDqa5=1iE!D%V8`yft^53 zdx4j0P}mU48S=`i06j`5drBUcPfX5OU%7bildkrO%hSGZ@NX2@(DKg67y>X_|8q-j za2dZ9du64LA$K{pLwDXh^VCd>NOEJRSbeoMVWc2426KX5-AftoW$cD$0LSut|9*v? z5<|{a09Yx90-;}2gP0P8CLyzbi!tD7WI9^ioV>YkcIzLR#rT)v8(eiMH&a87rElZKS7oyrQpUz^73k z$9+asJcfQec^v_JZem{&FW?-eaH$_L>86tMjln@4S>}KF3^R<|82En>BR`2HMK?aq z9uq%^#xrWeHzt$Tkq%Sv`6k|v5_@m|s!Uw|KYTPBT>qd_(&B6w_kZ}i@3CM8d!Qo$ zxo7D&9}b@vP7|HHc#{pkgE8PKD3XcyNy6IVh~4~qeAs9V? z*Tg)OjsAsW;z>|^dLF9*h(t$4;0Y80xEDfOhpd(1AiW4uzuPu_K>lsv2-`?@Bb-WK zI~@>n+eL=1u$YJy*#GYxfubb=fDBh}W`fnw;Tuej`2L0xs#dnfZ#H+T2!PI5T+RA* zurJ4OP-F}MkYsr+`4j*gH$I=QW8c7YCIAU2@tmg%P4Gou*_v!W*%&|nxY)?YbB#ASZE z@jY6SLwV@VS8U;AGg|Xw;FoBDHhfep0@{qK+t&C|;tkSuXbR38pjZSpN1HuQbA@24MU{e!*{ z-J*o&KKB!B1NY|G-=m0JY-ErUSl)6%97$hR$=!tyF|hZ;eEDz&BE7LH_V zun8IPZO#!na{gn)QHlBg3*9mT;CKrmyd#M^#gp~P^R>zYpgO(RjLATiF`6p?L;U9$ zzJam)u*U_EY&dIbm>FwiQBEKwM1&9e3sgqX@13y0S`J?+; ze&;Lf3&H)1vr>Fi3hsSz)FUMo2q>)}Ari zsevootjT^Sn8)vyy!s~)Ti^p6RlE#k0ILEMoJUZ+h8F=12gQp3TM2xgwikiY?9!*i zv1L#i$!mg1qS}ye3rBS!4U z6RhoA-Io0e&W#+zzP-28szEVXOzyv<~q&)=@eetdy_`EsSKtW&O2NGF$UuLqt*72yJ}-h_sSU*F5-u3v=0 z$>oPg!h10I={3a8hvDZItj;AE3W){!rLBC59&E4*48S0aC3liu1#9F}qKatIVpfY4 z%&9iFh8{{dqox}nw+QfwFE+Qc5&C)jEy4|7J&Wyu8>OAVY3v=O`rR;Sk+Eg4!TBC8 zB82Tl{6CMasV{fREdsa{<`3XfxPjOLn;7WmMS!r}#*0AP9HMLU(0p51!Z9fi>1cCP z*4ck&rfU;%@+yNVc9`Hce~0lIHWu{%FE}>KK;oB^tKHjF03-ykABL2oJ2}x09Pokay0Pw zuSP346yWX20|SgofrJhi;~?(r9JUnvKETJvMZuLBtSAe6fHr~AxFyEBb|Fi~19-i-j+vN(+|XDz@uwtxK= zKK`5rCK8^(@Y|(qj1av%wwFt@ol>;D2};~*K-AIUS3hKnfAwWHI0w(2SfY3^1nk4* zE&u&}tO5X7UfD>$>_$GHEbon}1B@^@ z_!AfnGM>N!I+O6bO_YHtL<_5Uy(8Ejz&1hu>IvBNY-7a_-*dzkple|cF9PBkF9Nj} zaNAaL@&BC}Hi4L^t_effwyD-v786?k)0+o_f8G7hg0Xlo_zyh*#7*8RceAVSinn)P zk5*7_jsVs{pJn`C&HQEX=NQh!5dSVM-g`$5#0$>Po;{oQ*4K+30|V_Klvh0>AX`!T z9&$SX+W;>&imlh{`Kv3(iVqQV0D6HxjW<@{>$p-X0MgO&r+VqMH*v*5GX-b0YfnLl zVrrez#XSciCbz0Ao#8JDRWv==hFuqavK;_oZ4?2r1{18T$iOe6@H|p(hn%=pu8QC= zo{T3a%D#RVK|BrWS_HWY#B&h;ea7d1e81f9=kh+{!xvOUq9SQ!)yKSOQ7c&#*m_2q z)v6>NMeqP>Rcl%v8Z7eCAyKVx@c3fkgV8^MLv*g*M4tfG2KC63Z){~dH2$L^wuot? z!ds{ww7Lw$@dG&mR=3K7>@Y(ezl1U1H}|u}vsC8egt)g%EBE2IunF1W3LuCG3jZi! zhizN=6g? z|9n*{0-qt=@L%1+wh_)9fQw)1IVh{>Rplj+D^FEMF9jY`-9LE{HVWsl^0!r~%h#qRbi0xU%~A#){zLcb!4=r@ zGy-!e5?PeOjMrfIfg{ahX@UrVZ?-0{o@1;99LHa17*p$i4E$WJ=RjYm2LQ+L{(%F< zFMjb0o2g;rRRBnUhJZTz$AE5@7KCx7Y1nxv^^=FI`l_?@fa7hNP>KKXz6ce~2&N@v1j?z383*#i1V4S5 z1+uMFcot8=5Db3c+zL5%8CpK30pdQXLhBXa+J39Z;l8_D4*W3e%O5Yne;@JrpFDuo zIhOvw&sg&(27tN%6toh0rp~NWle^Y*EZ!b6@3$zx8#^Yw2_olV_Ajn~t`Kh9a8KjE z(E}*QTz$9IZ5P(1B_A9DRVfLtfYy~bnB5gyu<5}nz`mb-lJyTKRxR*;47i7V<|y3E zUO|b40$}83zc5*Hl?7#yR%_XAuCuf^#;-;%@O)$VZe5L@Q_22N>Jg&|nScbg- zl^CAf3710ICP+Qg6kl858f@*xhMMLH(k7*3v}xFEX{m?h|K6cRcvnz4wgKHd5byh53O$75NzMfC&AHfIxjW9srx79|3v; zoW6x%F*qG?f|%B_4dClZEfZuv(@?3RCFhY=Aa9s;*Ryl)UC&{WB*MJm2l&w8!m^XK<5)0Fu9u*u*#)zE13dC0|Q z)MjPF%b!A40`t;IW(C#;R}5Oy3E-=oN>;(NymnQfT4DW0L85ffbS@Ph!v5;Dn;2NB zlPjV{&MGQ);4l39AF_NMp|yR+e}n~3MQO5UiPl=#CZHvNljUH9#VH;>G=BIzTln-k zc*Y6zPr{(=Pi|(D|Lb+RJgQrJ28|g@E@i1j22LxSYZ9&^z~3IzuIZIzjL1Tde^ijF zUN2g_TfXdj#1iP?ltzgs0E5BNKjPehe}y9O!Fd=ABEsP3mr5W1r16;w7rCn31c}Lx zRUJ8t0C8Lx1#)id5>_iV%54I!3}BT&q7L#EhceK|%77>;xOkKDjqy}O!Wy_Ph)Te7 z?MkMSp}_Ashx^~cC#RqoV^tmI`K|yOrR{^k5NS%A!C$47Mi*LXQqDDV3eEL8#FM&<${p2ZPCwA3L zU!wDIZ=VVQEcV4;pVs^E+0Pcyb>god`c?SaLP?k^X`I`#uESpr{5X1dvV;h34Bmsh zxMX7BM?h&A_?23LHvDmv0F}VGc77-he(PKIwRUs@DJBz*|M0(m{xZBc!satJhsm22 z?7t(R5`Vp+U$Di~%35SR^0#b`5-IR1KolGAvI(BWlUbE(i*j8#5|Z!v;fEerrtX?-VOS$aEK1zb7fpKi;O zvM&Eq87L$KFs_UMxQwx!^*;Ks&qp4J2q+pyB}6U1@@~BSY<2SN?4h}kN; z?&-@hyIl9Aqr`E9o}qMqZIy0kxr0Sib67RTcR!3gqA`uof$rmYXXp6v!0%GX(R{p(|%^ zp^W>VEm*S!KNbA+VUmNve+(s{pz)uFra`qt^RriE3y{cKYzPH1aQ!M^47l^v_u2lx z`f)aQ0X92K4mm>)bh%eex3=-G?qKBufHV|Sc*B<&Efk97A1yL)R-K(~1xLOW;GWQf z05!f!R0}NuJw;Y+GpnSUH6>4u?NkDe1Ca3q5T{{s{~157r* zvLyXiP!%yCWTLvpgs=fJHe7*sn!$hi*AQ5V!GC->4&N~j$zzZ_^FG=Ht2}oVUTjRB zt?cC3do|1dwegqbocZhizZC(HaNZPB00>;#0qpFEMj?bNTL9*(SO6qkU`S*1;+)45 z;*8>FUtZkD#ceKBd6PsuTE?>BF=$BM9#S;)-cc-xAHI-fZ||djz%Cio1~{`Q0m^b0 zSM#jNA0KMn)0edp`sN?P4DTogd>Zr}faNp}e4z!uz7Me%U^cNTiIjm6(4t0JVc3_y zcq04zJe9A2MJiF?Jc_4?Ut)CSrKCkApp~Jc#d?}m!Bo&`O}iZN9bDcj*>*%`gzCV= zm5IL+M*cgG17R*+K?~Bf^7Sp5aq~=#0zrAYB$s^`TrVuyV+J>VvkK!rEI*&eJMDW{ zY{m$PLhE(GVd3WHEq_+n=d?Zq3+5|R-JBEx1c@Y2K zO|l6NAj<#a>#X;Ww@c4~pTdpsI=;L6xhYSCT_)w-mJGKE7+Zj0h%rMhaAdKZNALuS z0F;7a4ci3km_bX70lZ*%$IZ$>7jb8LR*6QmpjjaBPl4@R#!is)O=A5cb@cy#jtMc& zM2WCRUH`cv;L7lJCr84^CUbT zhdV(qq22-f7VJ+zO+XdEAeRE@tyX))GDS6drqs%SNSAL#k{(E_e1;1JZ4{bX&jXp( zF{h}h_Nr`zG@WCfXmV4s6@M>;gm6 z(;wK%%eN*tb@3RsU;@gpgGK}QcTbnfP~J|ReY=e@^&w6GYv4?{LK|P_86b~ClamCZ$A~GOs2Vwz)YHj07f~OUGU^RH_CWuqfR8Y?H zb>Qb|d;BHuKY}A!In&2pCujPM!7np?`zxme$}8D1k^1{d$^q0NbFqpa*W)F`Xa71Y zUcvZ;hxI@aGt2zD5M+1T0c^d~$DKN4H@Gc$2j7cMLYD6&X~9*fcNE?pm#$$D48I>r zz1SXN_J0=vMlf5z$9>k+x*2T%smnqc8Nm>6^x%26@3WhDgmKw=M=|?@OW^qKv#f_h zaU}4K-Iz9f3BPA>)qAsN^z6oHKJsqvC0~~oUn{HzNPJd$4y>qGwDA+LdpA)%QGm;Ye^$T2aNHg}4Z z2XDmxpWJDDKcO3-J@`v`HBMI^d=k_zMmMGa6kmV+b$;s9DKc@D0MR&#Dbd zgLLXeQ53!U9y00RzeMEI!JoeG^Uz>VAQUgpFreY$0qljk2k-dkDX;2E5T>r8mRO0u z^cUxeeD`oL&%Hac*I(d?ahbp1-m|Vs)R?P83EEDzYzLqWuZ>gF_Lf2bSJ7)SrD#;R zHdrS*9(uDvSZ)61eao6yN=cj~^ldigDWC9fdNw0(gv4E{_^ttyHNk z?lm~8+|4H8DjsdW6&_JsmgZi?mqrEsHh>rV2}P;R0ME7$LLqzW#iv2 zVY&KTHurP55dIkNB9`Yl81E{%O*HLqK^3rNi~+plCk|k>2r&i_V2CRNq73l(;-3j^Ax`qLObk3$>}y#MSKw25zL zByo^E{ZW>^x}Eh_9+k_}DIAwv+Xrjo5r=jM9P}~Z%f3GMZE1|iAVoCZ)j?RZ~(x953b(nGnj!;)02%|*pwUg_%jBsl zE2_UK`4qSnJuqvl1Ss9qwI&}Mqk=eyTD%wSt?{(@kTyLB_^Confnswf8{b*N!Cf#I z{N=Y9V+qWC2}OYZ>$_D1lx;{Btq)x(D-4i(bRRuY*$hD50)d7k0wJOg(x8y51w4yD zwg@P*&!eCwL+z%?JyBglAS_Y=dkYM~+2G^z<(5WST-M>Q?~(F5yaQXf@n+ore=;eC zOUt9j8^az}_v_35yqB>V*M=E+gP zH~^5*e~ldg^AlN;KpBjhC;$3rxb&CT_HQlp!wNuwnf&(4huNW$zs(PuF!)~%_}I_qJrxiM!^_}2P*`yAju`RnhkFg{TFU_e zs~1K@^}Q8V8#;hmSmc4FsBQESPU6eI{}#*rFreJPfiX~;#G>Cf@Y@u~*vQ6=Er|^n z&+pAj0C|9aO{O^CX{{r>Hp8@S3fas#xGq3c9%Y~m9b_nxQ~>&y5g6wz-X*+0Hl$+P zSd+Kw7+|3QV5yML(4<+6FO^xvsM!>iKmoz631mdzyTVm~$uf)qp`^^6hph`|WYd>u z3R~rRFhXNE+wrgQZsJ|#`Sd|>!`ma5QZ_JJ5V+|&|{1vn`{?wg@Epbww;6U zPjq0S+7?s%{$aS-KX+VKEXsG^ZgBbYQ5lH`T*uw7((md3M$u~ak2I5C)-Py z1C--#wfv7t8T|E%L7(F=2mi_3#zvkUJ0?m&jhJ(TZi=U+rKSAF@#Et6Pv1fs0s=!A zs~rIEt9Sscn|!}KTwdK8zdp3E5RM0cAK35}Vq3!ky_EvMLG}ce*w4aX>hZ5-7Ar@~ z#>H>ex(}8=bor0{SkCV0j>6eK1MqMupZ{f+e+hYnb>u9+wH-o}eXYcmrB+$LX$120dE)*z$l|>m!}xFf7_LIJns*n>s01)|T@A1pS=o|SNf3WoQzbu8SqZr~ zi0nW~+5hLCV^5jJfDr^X153|z3(Rjn#BU4Wv9D2tR3%-Moq^FzlAizBDSG3Yqz8;P zFiN-$Y#SJ*7rL^U94u*5LeBxXu+bHG^k3d&SRn-|9^M@ z6!$Q8qdZI;m9d{3ss%Y;<9@={R^Eq2q4*ebxgQKe|6gy8x9+cuADlnBa5H8HFxp%d zW5D^t7+5(-rPBNXxJ&&M5B5>k+rSys+y>~l6@bqa)fKd?8t5@-VhIHg5M9y7;C|p( zIm<^FVp-;AU>+WBW4{H_E=@JUsaIMpny;XwPy^>)J}mn42R~#JhU&%4pMjR3ltIhi zR}TD!txd%g`ZEeD%=kwO{NSO||Ie)iP|(&*(Vh+knbPzt? z1FQn%2wcP1>0;F7w#mLXq?EbcOBJ9NDTs~l<_$f!LhngL32Is7nxtou6Zurg0FTb} z0OvuHXwqMTV#F zF=$VI=WF=U;@kvASi}lNA)W^y)aX|dx0!X3e>b>%9F%8P-js@%FvyHjP>Oxav=prP&Nie&to+=q;}d zOq9c~o1O{_A6>-<849%|rCi=yIV6<< zAgWTp6$9NiAU!6sa#Dc+xH&x&;7U380xQHC3Dbe|-s0Q6{ro{Tp$C>1pe)>hcm18$ z!^i6wQ_(OPV^L!ifNDIJu~^6E0mfxa)@8dOLRzZYC;*85+Abadj1MLV3yeASAiw=; z@^W>jczbFtJ0B8);bnK;;7Hk>Eo`xK$*@I&kzMZ`;slA!qoEJP5-*IYyU8eB8r_+n%`T$&0K{Tjhv78ijceS7qypqpau&v5uEn zV)SE=|0Uc=#@zRUVc$OfYOPU%v>J3+piGo#LfN!(8EAWW%CZz)}i1YB7{^T-Fn1q2dW>Yj! zOQtD$9MqLB1g-Q!^`_GS*g`zhO(|F-p8^I1(P9M)$!X{X0J_j234TWSIe~o#&m73s zH=zh%CF-k(63ub$ub~M1h(^%Zzu_!=H%VpdOv6U>bP$yR1fSyn466eJ{04a%Wg&w< z+-c!nnDZ#(*9<}gg#a-VxJn@JI-5jgfNf)5$m0*k77YG!;vc-I1_*OJNFMrAZx|!t z?!3av7wr`yX=A%szVmAGieoCkXyB&BLPSIYQD`>XG^ z%EzUC`0y7?I0%Nv@xFe67YJpX@yoz39nch)bd-jvWq~p%Fnt%WA9w zOyH@o^LrQrUczc!)VCbSF#cm?!14dMgZ*c$a?%@sAKSf3wtRa*^S#nbyjyML-)s5E zlVVW`;0zfn?3_K1zkli$sxO2Oqe-<-;Y>5m$g4at&kBQ+b zR`uS#7HLC&xWM~*Yy9#y#!|q@xXOTgwDQ+6*Sd;AP`Ln37{ez-*Di0P07yK5)2C01 zZy_1jN&twFQTZRX0no7W34~-=;0JGqkFKAb`((Zs_68WkI(_u!dA9!)mQbP}3tMdD zc|7jLpJ6-TOKd!D$tiULAqoJL0D1{f3DDWF%nwLs{tw#P_1l9$NVK-t*x>u8wLp)1JWgM|6hCt_bqIx#S-xP2u<6+bs?Ml<_9dN z0+_UvUJO@7FtA$SAO(sYsOhbtH!Z5=NG}CL1m&B8t<;xuqho+Z6%w)ujCOK6!21KoH^z0cFJ* z3BAMkO=3F=A<;10a-{$^104Lfp#+RD{&MvIRWvFTn*#*~)iceu5t_9p% zpglkj!jLKda}}Tx3Na^X1^~SZX9WK4+34Y4UMsfe7s3hvBOtwdelI(C<1^Uc(G<8t z;-JpGd@<7NfENOl_l8fH0G;2u|Ha*#Kgn@qX<{Ckb>O}a9smfE;Mv{N9ClAn&yJaF zw9*gKN^4q4tN%>W50b4+yEY?@t!A_{yPBPYO*V(kn*<1uxX;3U6i|0n-VypfkMKy3 z2)`mT3jo*4vckjtUGCu#&yVNNZB$23=K)BII4}c_d*W*_?n94}t|Jpp^*2!Nyi+3u z_wymxB#Kp_LxO?)OA=y29Dk$Xrld691(`~W>f8p?(RiEam+9~g!L(uYB5X}wgn?=P z>@wssJd)#$w&;9+H8tqu^gn|EF3p(me=na>`4v3HMAPiwc_?=-H1|ML=v%N1V$!-? z&I0@}hYv2karE$}=o#ScNtB6!$eSESlFuPifnKR@9cb390zC^<2#g7p;^7&Ky-=Re z_1uR)xPtZU>)6x&DNZ4Tu^>-k?0`V@pCh`sWwN z8$vq($+m6V25><-;5GyPXlOvjS|>pEOwcjl@xWw0xcsO)zuX=?-ZsV9RW=G{f8Y&+RK2}QcfxJXUG<*6mP^7JecO3w?IG4{eu zn(qYZu?VBePdtu8UqJ8_LwXa_)C#hJo%3p|C9KSQI}8(>XLn0_(;phBI?0rz+PlW%O8q<>-Xvl0coQ>Vm`+BIC_VL8by=_|2r~kR#p@ zItz(*?H3U`0O?jC4+Hd}JKtXsgEbf_(K@~yJm_Wck?%D=T2v#a)xApP03M2=bNQCo z0{6w!$6r!8)+?1n<7daPqXo+yG&l<}2DDORhCwbT{3w}|XlOpZto2O}<_BA4YJ+1n z(5dKdMBqyxfioUD73$zwHa@*9rvCU%(S$z%8hrlfW(2CW;7_sD6EX2U-?$4S*^M

`f>SD_Cg`LeUKY4NHtpLhEHNPpBS3s;9 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

jB7XG94Np~Gl@jI;T7=px3SEa%>tC# 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

kOc2)6cTOq~OB!F{HhvE`;$54)>}$52 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

-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

g7V{+(IA7NJ6#^|#WPF`b85p@kyFfo><{_ePs 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

w{_dy+0%2#lx)B+ zT&Ef4ONxZJk^(40js!!tQ{&<$S3zyxTjy5-P!tsxvqP~6+SN0zioz2Y<`;YJ zawYBX+MQjxbza*JahOaH9Sre`xVmcsaH{#pE7J)#YoVGdn3ecC^4Iz006f)K&hyL; z^Y)_qL$mr|$yz9em6wDYSz8~M!d;(DoBj?*OE=4{i)xRa(kS_;l8<*s1^C{V;S0;& zLWrN(y!FNsKGwsR$B?KLMw%4EKWmGF1s`-z4XV0E3kMz26o0;0!OjY!PBIXlWYZCv zP%Pc6SR;OP2vrUq$H1h5@S91#Ozc2uyKn{sX+4SfY7eE9PjD}Mv(2!d)3Btl-Q(2@ zhGMfH`J;Vsqc7-ODm$?3?!-ZDq4;6<@?`P&ovzk9ACE+Y`2LRO@9Q89^(6#6hGPny zX=v8aZW39dcoxE441`lm@ST{IHlz#XS^%^xI*G*}-}?gtn>u})@B1e*r~q|SZX!YMI0YIb?&%mOk+z7|z@dbEoF8+C z1|Khb#|h9eWWlE@-T5=phId26f5su9?JIl1esbKJ)M^f4VF1-!481N6b2$Lr9C*yE zJEeVRje2FxkLs3y68{Y8e?O>s0;M=)5ln;Y>dd;=+>JlGGx4TUUmqfFHF5yW%P3js zwmCE1JaG=yrYStS6^&I67=8TR9T<=z#`tuf@CPp}cSil;xm6oXanBYS^qVh#zv503quH66z< z6!3v^C#Y9p5X&UfvY?t?Jr-ExfIyS_Ga84i!{V)k4mJnj@XTw|muaiNK=gHWUlNH=)KbR8--BEZb zb9`xjBf!RytEgQ5qU~AJ15nh23y0soeZzJddHaF?LTG92EMr|7v(Du+*7Y%eAlnR`Qc4xrI>&VJ?G-7XkO}se*~I_<(h+(#VMS4%d5nx z@~0b2ar$w*ZrSY5)RAz;7N_KyW~?cPxK2Jtu5#IN45+CkyKS>fmlo6mQ)cv&fzzxM=&{5-#=!D>uKl8sgvqy6FFG&pP3gZb2;@X5)8XeIE$dB++3OwW9>hh|>P z$)g08TWYmx3VWYN=8{y8yN+BGR z18KUb&H1pz5@o^+KT;Pwznl*KNNqjvXE0gwCX>z%S2Tg=^R5lr*=iOzG>DTXZJb)|InZ^W84`kOR9PH*I51`v=% zC5W^;TC6@^F;pY|f@v-1{ee9d!Y$1oH!aqn z#P3wcJKt22B+tN`b2(~!FE_C#F?0>E&N{c!FFkeO0<3Uf7pwFcD_;kN2zO}>BM!UY zZoE$BhK8cw#$x0?Z;yAziE7)aA4qin_Q>&D{sXhwDjdzu>{rG(eCfx!4EsN(h4T(A!HAKciT$S9|6EVmVY2B+0l>ya^lFt_{ z7hVMD;3Zi2Y&*XH$H@@i@F_muFTXKovGRlQAkaUbZDov3uUn7r zh@ndX8_n=sOjL|oOC`YQz zu%Tz~YcDb?y-(cW-0c1}L_2}#$PdLHl@TIfo(rL~$E&aCs-Icx^mw*1j?vxgX3OO^ zDjI6@^B<;!P^>E}7bwv*mG)Xbc7OTIKFU7crW}b|vA7Hnv_RANT2jPobhk)KJo!-j zH7-u_%?lYTDmMG%(KS)%-g2)G76>xgiAO%nReab%vWI7Q93wb5n8=3APsbA6QBdLJ zj`5B@_*&^6jdMkmOZRcb#?kyxkJ4kxjyku!4wKBc3EA z_ws6kZ7bg~yh4s%;Bfc!R(Me06O=O6QBwP3eHWq+mGg<|QO5ZJ1SbKML<*Ahq^GaO zz(jGf3xIv-1PnW418jokSG`MeK_J=uiwQ!h2Wl~(xluj?$pbq^x zx&%8K<$1q5jwjm(1j<-_H{(rtT?JtLbHC_IaHPMW4H*oW5EF2L>;r@VzFslR>!ZeX zz2-0fA9GfwV1zwK>j>s0Mb8lNm8gb|h|Dhgk*zM7d&l1#oks4lTXh^j?RdBuVOg{KM?CZMOjoAC)QjyDez~|jQ(`fYme`F zIbEc7HIYc7Qg`vV0voilLXNOh7ZPm>JbHxt4x8z@Bt=%rce9Hgy7;yndYtNBA{S`? zoN|o(rA#RQ`D{Qy2>Cu2pUkh%0qaqR-W;EY`eWeCMB{%oythvr-RH79x5E6mO@8=1@NJXH-a%8i zp_IV9qg`i#Xz)Lpd@LJ5@llVyR1PI~9uXjjQqd~-dpTve>@~xLbhjARiEdU_s5`ycKnH8WW_$yto6t5 z5_>W=<;7R=)6!W#LwlH~*~?a`!{MGGG6Jr_)lm5+zp;lF%-)gdLiig$%vkbdb+%}a zcvUcF_twA4nep?-Gg{1#HFjre&lR}Nkc(|Ebu{qmt6l41r<7mca}3A|RqYqEo5}!3 zY{H9AGNyhPXMILlHqayq@4{Wpk0cv49al#6U|4RAzi?l-mGV%v90J-tM60^r+ zHhe2uwbP$<)C}GUB46l7p~$2*&OO{LSZ&P={ZfdS=8t6svfHC@^1Uqd7Oos~WRI}} zkCAb#^rfIH!1$Nwrt#^b5S-qVUC_jo<3h&J{``qW45E?)tVG6qD_u$@l*@oyOPOi5 zT;7h`IhvNf;vg;YMCsPNhE1vI+DY&k2F-MOKMVnhdutO0qC~z`OCkLg{PAZjndA!LQ+P~|E1K)S*Q@f_dL-!l|U~~;*(uBTu8|o$vs<94zKIm zfaX5*HgJPDen4C5U49Jm7I#_tvd8kw@vd?TPn6MTRNn(Vyyg4c3J2FsypZG!pN9#B ze~dqjNY2Na6|Z!g;l~(#-N|o+EtO!+xWd>=N66H?ds~HIR4F8u=ai-D#A%izf8CgJN84mb>slU!!gLpzt}!Kn0Vj1{EenAiPq!1VaKY3ZcY9T>3^si zDa!dBX{a4* z@5LyZx-%Lcq>$}=ug(z+u5fUHIQjH8dsYB_c6e6*(W2h+yO&b4)9=*>^S_J9iwlOr zj;bE(ZnpHnm0)}3D1Sc3a=kg>-QR&wP=Vmd3E@kig-J?qUV9jZ6Wf$puFRPrz0MV^ z;pJa;Z9NU_7+~BIYPjq5Y1ym~1w3N4V{ryH#Q}ag7zop~T3@k~exiI3~u?H)xI(BSd$jyz;4Ck(@?(WUENCrFb!6irSWYcgR795FoD(VCX z2`-U*B+LB`5nt0&G^TVcv}@qkx`p-|tgzU$BD}OD*vNU8l?C_1r%%BXn^yMRrV{a+Ih`b>x;&=!WBa#Ji26{pD7rH@1U2_{tsT;Dw@5OJ> z-|=B;awA`*Mh^{o#66bb#|;ZmFz4WNN5qW$RUO+K_c00}zAHo8pYF zD!u_sOJf%O{QnJEb*eiSu8(801FwYr>>e*Kvd1^KLZVP6B*ro$@7~H6lVW_}ls%hp zt#XFQqzQg4R{B90Bt5s%Av(P>BieN0Tco8=RJ8#JHeH~*oR@PHso6@e5qDDV`1I=m z#g%2&r^{rpi~t=CayZDp6wQpyNIC<`iEZFUvGWwY{z%V1vuc`m5@1vN1<_amVyr(g zo@`u#E&6ufI!bAM95IUV!(N1AH{j54{lCSz4x6>uXMA{bykwl6&Gq*FGZ{r4A;(07 zdJA!6k$`dlg0JUgD!BJERX1-c&h@SJ^U!={4Pst?WYcl~Ef?U9>J&naW=AqeH}KHr zhE4VPGEjK9NOx|IY@lVGW3WsAgX68FX%>A)=R3e5KBoM3PZ5PnWqQ@1d~wY)^14v? zWkK)rXgcXltT}hd*iUyoP)|qY{{wA6lD{AMb-9&SFY|%8{o=mIZfWV8`??lC>VY z(I+qsSS-H+;RTgawj47*3%PG`I3u?3qQ&fn4EdLb72b?eE-_5EmzCe;5e z0}sOPk=KHmQo(Xmx4BF2#cOBO3o}n+t8m=1UpS4G997r1!hAHQjY}WENr6JB2)n>* z%NNzjhPfp!2TDkP65VFt0($7(!4a%l89l~yOX=1DL zEu5eqSn1mLUzw!yAd@y);1WwCg7$=c<% z$qPbIel17{>_Gx7THa__h*^JnY4k!2djA-M5j-(v0YmZI0A6yJni#wbQPKL)*!Z$oA=Q;GHw7$A#iPd2D=C6)lLY3 z94-sOA!ZCRP34wGaG%6JEd+2Tgwp{S4Y@Sko-BF0kMGPE|M;o7=V8kb`Or={9o#-l z!=Qq(`%T|A{H6+ky?ghj@wGJl79Zy|A{{$o!`-?fUg&JMtgJoQ$m@yZgxO zGV*`)*OiB>yKLs?mfn@if2_RpD=_x)j(Mx0(V@C+%XYpYXVJM{I`$vahfr)D7HZa( zVelG)7BG#D(Q6AJbxs5D{R$ir#!+KT17dnDU~pa9IvD)joE{M1Z`K!n_ulM#A^j<% zj6kRQKa@L;F9hwvNNUvofKGSxpLtdNboLoFoP!?7wiJ{AFUThjhFBI|(wX@1yKJ1^ zq|sO;!~Ft_)j3?}KBsm-2;{w-Oi`fXVP#-QE+H*riLkkXZxiS#AB8{%s{{M)*qKlN z$&cn=z`_7-90m|OhS1kL$@O(Lv13PTVPPSDsVFGq8|Hh{1OSipF5@r{5B6|xKbhZ6 zwu?(ERrlZi^3G4acW>#ltU$audJg8sV19R4&-p#5|C;$3h5h{1Yf$^Yf&)C~R63uA z0FG;HG%9;w*U=vz?xq$L8>gFiV~^yc$7NhY0xiJU0(!LoL!Hxr1so1aCUKQD=8J)o zLIgqjOrj7}Dg;)$KW=sN>B)ZcX4k-sx*XM zr@K`7+$q(U{t6wvJvb3;VcK(MCZT-MUj|~4qbOeW^0e4;T0uLA8+uQPy zFXDrnJHh-s&_m{TvF3gS+j_r(W4jk|W*;NJVSZskKTo!vbOweEd)uAJh8eh@hDiiu z;}}09`#7dSzDbPe&BiiJ0Mr6@0T$H)h{$O`4%2`u`0V!;e;Q!&kj(u|ESL?Byi@-v zft6k;M#FwKJ&zm3>mh*V0%OD2=_Yq#`R^VekY?y5L~HXfdj1rn|BG`N{qttikBuAk zGcTJ?OuQXUbaBLsx@cOHP~);2ahY(f?hAndUkI?zVZ#t_BF=8vq1N#I!ghI$ON7z~ z`0_i4yu(9zckb&a7tR)Np+FO=0QU}K+S^&oWZG4HlMbcP8AXfr28Q1Z0U#TFIO^lQ zinzfy@4Bslg~f{V4;~o1`-}IC{jQfvWM!=%6~|3JseDOo`S2HUd&@qb`O)MU`RnDY zILY@Fl`UMxe*TEs->tN0otj1kLNv-xLktVcg8JUjqYn`a#}O?6XAWQsNQy0hX@VRW z;xwRzX~1&zWq%rA5$NX)Nc6+F4t%o&dhvQ8c2>Q0LU}CK|J>c!&||CrK{^@zVJ!Uy zMt{dy!RQa0k3=)KUYbG5P53sY30yxP4oV^f8cU)H>>Az)n?P2k1Kc&}4v(oU4iWK7 z#w~oq5NZsj0ysN>vjY3ZGly}9z`5_AUcOQ&;A69`M2mMAf)_g2GW@3O7W_pE09ort zbLovf@|B)eX@0Tkz5h^Y|37{ImVXL^%P^Nx!23AT*OpH_ag$GB_pM?8B;Ro4Z&YS| z=D&h9{y65}sKcv0M6#FiM9UP#VK^w$^|1roI7$Jm7q36$Lztni~DF`IC>w9Vx~ zSO`0B#vXxRr~shRPb~iW+HN`Avr_3~c8w&*|J7sL{=4y_H;ww!%+Jb1r{L9H1GnCT z6Mp(cADO>dT~MnW`SaL3L$#l}86~{*1^$6Q)8n~w4O zg}`bAZ2{aDkjCe+ak(^-lL6pNa+I0h##^srH2}Nbrq_ji6yh2rO0R)P==mwRdD1nw!5|$#V`9+i@r?t5#2+l<5x! z6S;mI$JUESr?S)EJG=7CwKY{syEtOZl>uJ}Y}vA<`HM6P{=x(RjebjwhOzil^~V&T zldqH;x&QTZJO1ImvCQ3E?nCpz;twf{dH%?KkE-E&9>HxbnDe7Ch4~w+u=c~?mpu=a zI&S2*8;kz9MvUOteJ0d_G+rp0AOd268bAD(`O_AFoou*SxYZibD+1I4s2BT=SPt$f z;BK=eTovZ_{bqnk5u_DJBxtZ$(7+}TKzn_C2}DqP@p>V45-$Hy{qNxNjeGUxAF=)e z=qJ>pKi2(c&*1kHf9`M7u>DLF*QP!(8`WeGf|)=Z4HLJ~GsuVKE)AC_5%O@J4MpdDnl;9$lXKfEQ2<-vuYU}XS;0Wah@_=G{TlUQ9< z`|I^zm{IT-B>;@kPcHH#^Sg<52^Rm2N!p~unI z7%4ee^0;gpOJ$e-4D)>~^%d}8O$zUz2aRl!$4&=&(0Ty6OhN=& zKoTng>lLvDB(R~xR)d8}Q7jq*7kOp4TEnP#z2=F@F9xKAfE407e_|8Iq>0Dt2jv%k zIsKvf&#S-e_a<=~2)XY6tus%cotLpq7;P<0M2c}#<6uIGel-8=Bw{&v z<=Eww87$+rAp~Hg_W!Z(@?)jEP^5C{tn3k>5I~a7MA6-|bHrW$+OrF%u*8_+w3kLf z7{=SaQ4kka3Qt7d=k*OiAL%c@wp@--OCo>jRLm-=kxk2YE~youLfn@YPz z(*|Ly*&_r4oFF0!<8fhh^x6tW`Ee{)?!Y_QD*~jB)d1K5%Jn%Me!*?SupMl^4_NsH z1r3Vh`!=Ty5ZR*FL&XLJcyZa1x$97gv(A1sIf$#jWa<-OauiMDSoF&{iu?S`k1_fi z<`3uwxosB46mhr#rLHe1iVx}m`0#%8!0w3RW}&kSm(g7_YS-{qZ4?ANfi13wpu zP;CyEim*>30qP~ObJ#rq#y|hW>6J@`0+t7xum_}4EuL1z!J#&e5K{=eq3#VA0G#)e z>3Mg56GlH?>an=eOy9MuF#U&*O#D8i-!QiM;$vOIsz}Orw%D^9M~8_;hVC?88jENzeo$b!xy-GJ+PcOb{LTBpXYW4=7tWJ{>Xx z%s#LM;D+J?&X;qU$Z{-(!`+VX@XJBC*!BioB)>>7AQb2_8@{%wzaU{BUyu>$8Jb;W zymJjRxY6SMU=lJ$WcMqQQz(4v%=dB2?}Ey7*Zl*!U0OHf>6gBzgy<>;)-Me+?iZ)~ z2irF1b#M*&Mcg$wq_&pERD;tz^i>D@1^AKD^;b_~j{uhk9ohpro|EvfGO+jLmHP9i zuhmww8EzDUCcsTXp4a|G*aO~Z0g%Eb{}M)Pz0DVAKyhC}zTIjU{@tgyeR(_9M)d(7 zZSm*ki7k(Q4!f%MYl}Y*_h5s}`uq=6vx0*?LmVC05T?QG9?`FXY@9fM94!O80h*f< z0$^}z0o7&nr%C1Icv6rIq4N>e1T&;yC0{C^fj+PdrHD&m7%`;iaphrI` z(jQC4)KqL_h%hmE1F@HC;y!^(YD;k|?h_c$w-$4Ga9|jN+OS%A`8g2^+!~B&Z@Z9A z4(y*u4}RsD#b-R&33+k_YCsF>K&J(Jz-qltEnwqn36zq*w&BTyDR^3&ihfd+USSTo;UXn-S%EN<_oAWe{JPeRayFTRT##l5flhL z%x@aWym%zsT^%s-<{7~=V0rdy@ZL0J&aUewvtSZwg&`=C$%d+~<3LjpT7b;+gLu;8 zJeeO5UB!n(Xj#5-7toWm-Eu`K8Nm{T$Au#_<4^<^;87+*`@`3HZdK!@+abIIVMkPs zniO8&Is2rlwdYhWO#vUI7jp9F=Yf$xT>5~z7NCA5h3YC4uoJ}6WZU6_P)zYEvOKtV zWVb#%#6E}>j?CmXuyO|*g?>scfPGoE3*+?Qj_pJ4>R&#;cq*5{t`QhbWVfbRR!9c=U^R4}Tfz4-Q+x0f9!p0eqrs97aDq zw@1f>HqfZz>p9o{SY-#6@kJgzchX7t*SKgSF>J$pzYUV4Jpe%abd)YQF3o0O#0l`Y zJFr15Ah{JM7io^AMPO41M3c3tkzF&UOC_i&xZBmwt$wfq6IMX7gad;&9_&{cs8IHY@|$^^oWR z^g{$3ERFZd;=XN#KsosI{Jw85igMQD`gY|`Ls(Sf?J~)Ija9o2nyl1xDe)%Wo zE3<`60zx3s;&x%MM`w6=xcNq%9OTK9*WGc+4;7J1*6Ud?e-=BW@@v&jddpyHPh zjmSs8_7pn(BH2;QFPxz!8I#VS$3F4-s!UB)mw${YVjYyVUZYWY@kJ9GO>k8;zBAB7 zJ?Jts_C}mlrr0uomcZF*jsNv~Ccw;Sdz}26z}$a3_CDd@4;kF##jK#%K6mv+2zPv* z9aA0ctaAI1{*87cxLsnFCnmiqA1kH%Ly|81dVWlM(7E~1k_*c(sPCV91{xhS8)gN1 zwEK)djE~Xc#$j3B1`m)I^5BWzeqiJa4JY^O9b@Q59f87XzP_i~W zoJZk{IN>KxC)vh@o;B~^Jihg_N48`h?5_8-Lcr{k_%wHR+g@4wCs*UM>}qxPJGg)O z2N?a$;U2a?)G@sci{eDX#04yr#)sKtq_qip7uAWVN~U1@Xtt^tNnSw*(uTnf&oL)D3RniO`F|M8C#u zI!!f{J&w8X0kH*$jRSehGzZJNSMhznA6$GAdjmj#%+}*J3uD5~;u^d@mC!8%;$u-v z`YvKm-Ufq4!PBt(kLNMK6^39BpivMH**4$x3NE9VtORi`RcO^ zFXS>Q2!;gq!KZj~u)UPc;v>ct+5-%Ey8u74|8*At)6>&wGCw*1B^cKGsruJapTB$L z*r#tF{0CU+)00{nL2$xv7?*es9eY^s@kfm(uq0GnJ+101e~EcNsz!^>J};+zvH+ZMs!%+20Q1@uZ3h3iAyXyNF zpHXv_3(yd-vJ)!+;_``uG21x!W?@Xv_B8mG-++iBt_J{U91MFpU=&oiAM*UdvTPFK zlt-+2v@KeyKCqzCiv$QOuN-E%!0 zqd7W73p@QP^Iyk>9#zo}dJUj#9Gm&z2V-j9F>o8lG>(arR`h8YnEkZ<2G=}6OENMz z2F|dC>D+>_EHMetf)N|WAQx-L?fOq~sOd7^9dfbD1XRnLxCU!b6})LVMTg0fMJ&5b2Z_|w?4AR+H9Q}FnFXQ6!4EgA19V|jziUE9q35>B&UWWDm z6)?Zv{TMKj$-_KJIWC`QyeUB(u8A{GHi&L11JPkStxsPbHr%A>2Mgl)ZGj@LpI>Xd zroMCLDZQ~v1~j&ROO3tfLn^m(FTO{~ZSH!jFb4k27w#JTOeyaUgLg8VK9iR?ohEOA z`p;q&HihbWzMcXg0jqzu;=0*-GMU3#eU^uuYUP^qKmOAAquU0(!%+S4`q25YERw`G z*f{TZ@~scKA|r8xMdJ;g{UlA3 zmj&-8wevIaHmtWyyZ~gh=%|-)xyetjzN$Rf0H_5(ua}RGOuX+g`3@m@g1kW<*)iZ9 z{-3}z%vT?0zlG8*aruXKn!$YT_K<$Jo(^dFYhM zXi~UK!9X7Mgo`FhFrazKF>ICP?KweN!@0+mxtpuyiQwt1ta#%ME<->+zDy?Gyoq@dZv1@qb10MF zzXFWSm6KHEn*+JJ`ri2`v0b<<--E!3H~9)NKRq^d*MnmJqUK~u^WNS0kCJ!DL(mO! zu0OR=1Anp)=K^L*cM#Ku!mIzo6q!kMNL)aPm#j zHu>_2GLfNU1%aQx#=>7eKPD4r!aO9Df}Q6Y_Bxydt*}Xk3bW@FR4Kg=7IjRMOf?uX zc$(4GP}F%@2wiW0p+SC_kB|!h9I51ptCU~orF9eguX#HSV;Om)Pr=(I-~6-J{yEa8 zFx5GQuk)_qi%40_eR=b*cG2R$fd6hG5Y$M8Xn`z$BB6VVnvS zFcm1{&c`3V_N-_?`qd!hG4hY#z*}bPG^W4&rUh38I_-SM8T^fVM?Og&>NMIJ@)V{5 zygxHTUPHF83-5+|T)4(I9pail8kYxs#PA0xkE^{ZsXut%*n=nb6+X@CLDl0wm=hzw zuL83Y?+Jlx^`B;M#p_+B5Z{$yC&N!!UE8wx*R@h%u_<8b0&J{^;FKp>KV zkH8VZ2$~2+G-!|9QsfA2IV4oZ*NpT0{1k<|{sIn5Nnw~sxcD~SPqB-TYGT;2H2g*3 zVXU}NOo|u~Q}zKzh-xef-+J9qlUV!D%ltoB`_~tKwA8oHJ^{gJU-%Ir)eVxSX^<}P z20bSIMsLBmjpFSreLRCMm2Uzucs__-I)iUVo?l$R_XoFQYFE<24+7B16;&!%P^+gn z739>9A0Smc7qKnlBwoWe2F~TOX-p3=8N@*vXxXjTYj42oAw^Qyq##BLF;-x{vR-Yt zlY^PD4;?Ok44+nK6QW0Bl*bX@fy4Kx{NAJbBOZ8F?(=U{W>jPS`xyOc5Mqt;XFER} zSI^RLb_D%8ECaN716V*c3iHE)4=gDL0y3R2VLk~X75ot#`so;!h;FbO4{&r1T(k$4 z6KNcL>N=TtO;uNLY?RXgpA^+&s?&K7djcHp34q3gmtrpFr!%wv@&)+YjEmrrXpdul z5xgE84d9Y4%jjb5zm(n~Qy3%sDAZjn@19+}h;RH|#XIp#hn-=+a>wNzhZ_fDxlH8i@)~&#y!Ue(1b-ZjY2~2a z;_gP8e0);!ez5$%wtQ7xUcCUrCg%Q;ot@$QyD9y0kx&$-%cQd~<>)WfK)OuL z=L5U*AG~{4ekXVfvun`;vgA4P9x%{xes=fs2mqe*PjlH1ml)9UpT!wR+>Y4vzI@;C zqXXI07`He=lF6;UnWJ5(ln;2xPGuGs!7LOY-e%>tcO$&04Pxy!cd>R3_dD~`sl#=ubs}P z)4_RqZ$uSb>^wqsxDvKU;9tt&iwQw z1eNs;6r}k7!qt~x$EaJ|eoeVz^6#l5;>O__IG?7V^wTkHob5L-^Ng#bxV-wnOnn$~ zvE|fhsReLvz}2<0>Xlie1+Z)s0vIIkctAcm#+$FnJLI9EtTXoI2ZlZf-b$0lsA-eu z$a~~LN!-o*#ymfd07yBNidptcQ!*{Cw33e=Deb#;GV>t!?&Fp5Rv0%R{fCb~EVuh| zl#mF{{qdoNR_z5`j-f|?Q@#4hE)}p!0287lEORIg=h&pjr+`KPGgU$yAX<(UZ#stk zG=8GOzu|O%IEJW|PC!VY8-p&2cGQhy4iFGSS!}6oaoR`K z8Wc#1Bar+o@;)dGC(z)SH1?Bm7EJ^NpU~FwnOM03=R7U@r@BbhqEBh zU3mc;rm*To&5>FF>^-UCAf^HzK>LF=$vcRlt>o}T_PviDF6|?ak=HQbrg4v8nmh>V zKeHC_vkCxi`pMKiFU^9;+@H&Ss+sxR(b6LY7e|13*oTFOfg`{BkSgrI9R?0r=Fqi) zC9nG0%P@c~!Xk`L-DR@tRU#XeKi^s2_{t9p0xbkgLz=`UOqx-cAKq{}V5c_)BPphh zdmjyBtfuaV(db@!63o7nP19 zQ)_BEf%e;f_1ga+)c-v)P3e{oNL&Yh;Tk@ek;Dg5(AHd9)U85lq+)(dW&9?NPddUk zez2*vVwb!p|AJ}ks~Mm_Ol zZ0X<~FqGe__sF0V>BBD0P%+N}x>!@LBw7Zy(r zXaMUNVNv+aKLfYJ^cy&yl%B{g1e0()OlrZeE+Za#(^~WmEu;zX4DCo+fT8~p7yo+F zm~@5~3!)3ddT_JYC|SkGfNRh7T>%sXOoLB}V^2WQ+lx^nx+g%Vm-mYNVR^L+@-dM9 z&j@ZnB$9;X0xteHpuXn4-I%Hjqb>FEX1+g9`7KsfaOKx&QGIbM6rjfG^g*4nPNMZ= z>dCK9VCa7auIXtSw%^2?XOwQgyrXzbzgb)#4~2<;CsTIT3zm0r{rjnFr$HSRXc9nk zPP%C|eE0i>cgP&9VXlrHnn>UOVO*cTxKc}!=V*5$50V$jlcrX0iGzZ?g;GEIpl_PDAwHDBPzR z1>5P-Ia@6cWjl!a;hXvn9;*K@&ce7U+kVm3-EtGBi)m8$PgBD-I1a{m!b!)_GEc_Y zeun96Tn*_Dv*T@llx_^oD2m^s3>DhDaT^epMbF^V@M|IvB#CGNb;TWmh5biFBM@Ff z#pS(Z{(IrvZ}fd)k#u@CEE&3+gqfKP4bX&5 zhCr7zgxfd<&xZNgNK(Z6!o!04UZyeWtXKh&Za`aO>aacf&Cnz;O|d|q6%00N;( za2inXw&0$C?a%^fBr^03&3<8%EAebx6SkkEVZ!vAOaNm!LUCwoL^n|`FS!NFe_ZH$Dujn%nW%6-~@T=z+~p$$Bvc` zK;uq83y{?}Y61BDOtyd<6#!!Sw?==FM3hLMxUFy^m*F8GDE=7zTd-ml_8e6?p7ZDE z&sSibap1xvs8zd)kq&;TM^=>WXTWmZIKag3)9U)|Fw-I2ZB&No`oVOpR@IFjU=;`H zDAIb0fMmSj*>q(c&ybzg_Jf8$ItDml+ENlkI#?2P9DFBm`9%~vu5f!D!kBVkHuZ*4q19Rk%8YdM zph8UL5s{8H)vYbReGoQuA7B0%0mYAzFP+TD-+<%w*2dhKJvQ`sq7R+e@L%DS0$rC@lVO`Lwy z25$YqhEEs(dFLMm63fVKzbWV7$c1Qa7)SPqM_d=8Q zZ2`a_j}_C-;HPgNxSza79;6mPo+NLQM?=|MCvYPIz*$>c6RRUL#79gri`bsHe=@t} zwyo*=SWj@|Zn0u=&p#ztxB?lC&g~X~vtLzKD*P6RRYVfego39X9jVx8MN4uE$0Rj) zCfviM%r+>8_VI53>n0VCT~4AQ+#_)86mfI_3xPuc#PQxhYz$iY39684wRWa?jpVUy`^627vOKmId zfR>bjMu&Db0*A?|QDM9A&~5jrB+gDS3@43x+f@3#1C!aw#aa_=*5R_Chl_a9>+9>( z0yfRpn?{_To^~N%JRC;wC;*aeSpI8G=ks@#?!r!`EtubNiYwQA@ur{Ljsvh=U_|Ju zHBxjGA1Wp4Hb3@$)odJ8>x=kM0upxjhVvDJt|TEHMzsl}nRru;K1$z)@zZsaA#5sH zNcdr4>qgW^bA zOmD>jp(z}`F~&ffuI)E8g0gzl?UglkYWPYAXO0PFNF0T3-yn9FH0e|U-?<`jRfkXG` zHB6Cc-J0-g1aCs_ zh^S4wP=S%k(6iy2CWdXvIQWCziTvC*>{B`+NTp!7p4jT}@;UsZSjGAf`{)K@Wi+Ix#B!4rKvf z@GHaoR;F1o1C$5s)LlDr?;#IX!HeWc@@5KJ0C^R;#uYML7=$(}08*4JSpE}>W76rQ zYvoqr6G!p~$BWJ$N_Z3~$^FZj@g1tL8*>(p{wQR;gT#bdo5Tg6r7e%c$njCNG6#iX z4R!$};po!qY+6L>#keknX{1ci#L;j-Df|kia|H2koR4*cCBY28B=mf+BnWn5Y2|=W zb}t%m2%|5j2>st7C}V#dzFDt}hZ0Y${hcDze@sQFs``o9!B=YQ>eL+W`-2^W_JA96 zn$q=C5zpjma)^crkHgytZfHfHEYbB#6-{NzNQQOLx!0-ZLckF({7H!ujJ3 zu)N^m5Q+zDqlX6d8to2LjArJcy}7&bb>k#pn218oLy8p-+#z?JaqUuG-qgQ&cB!+2 zbJW1?F{AgX;`pztTICS5ftnZ&*^$f$6+D^PYKU%o8<^cd2F5gWRycOP9xY%HrV!AA zz+`CA(!|5`1!i#gG|s@HVZgiD85}%Orw-PNog}Qp%P#@PED5sicxmXcD!IF47hb&3 zH2K(1^A0vl`9yxjP6df~iUZ7yI}Aa22xHnyqS z^bFjF1*I@bvu-;Z*ZAX}-HMDv_J8j%;`P#-vf8N(EGT=>-?((kdmUO>@5lEKI$PCa zw>+*su=jqkjSx=Z&~1N{y?Js(1TUpZgSblrA6KQYC$E8dyrfE=*pt5-Jd`F+k~hht z|lGUi-QbY`Kk4O3+M zbuhi`pk9mnZ^QQmhv0|MKLainl^;H? z1}49Rsn5M?FNwEb`mqMd?%J8W>G&+E~Q z;`a};jyUSC*P80eVoQ}$d)227eo}p4&ja`rx+_b5#1ZBHUuKn@D#XG<-4tbLXdh#lHb{f2E$oG3*PXHuv^^mdri}imU+DInjmX2>t zAE)IW<)!W~-#IJny8|-EU;68pW84c0u5N%%yM_)ws7g~GQ@N2}Q?)Xt1+z^Yj^Vap zAR^CjgBpT(3JELRuM9R^(&)Txu=X2Tb`0$ugd1mY`oKt9@D1K3(+QfN1~j}(1y_b~ zNszrnI~oJ|AyMwaYc>M7i4S^{$=j6Cgbk(%ho8MFxQ^%AKl7AZe~j^u?}_LaW?sg& zRxbSkKmouc;&j@eOa#WkG=TM>!dGOBd znd9V1@+J*|{JAjLlXoLjd$PTr0B|yxPr&#mL_MeD!Qhbi;4QgbV9k{?82_v#^_~p7fVldUNC*|oDX9^p3p+6__^e8oeg%65rqvqk1H3s^@0hY{t4kG? z*asflfPOkj5>3Z&6h?d>){W|Vd}0<(7XqA~a&0mlXmA^Viw|gY>MubM`b&b;0@wo( z$$J743SZxm{Q`zApT^%UNFPssJT_C{v;|vP#y`ffEAqDAYwHW@9G3oyS###!Pboy= z@`!_(+~PZkT^{N|y^gRbJPyW`Q9J|d2WNcXObH30z~j07nU$Jas|={)Qzz7~-u_8- zY%BLjaB8G)|A}S(fMnn^#Jf-M1-=xX+j&5~DnyvTFdU09XPB8wtf++$75=JVFJG@427srP7AbJ5GF0m7H!06*d+05 zxI3zw8fQHHbT&*w_=e0zmsG#8zz`jN>TW7{$b;HLkj75m$In&%7w{CKG`{xLfTwg7(YqovAn*PY&; zWaU62@+KBcyrwpy@P1+HJ*IEz9;QRaZ{9wDn)2&s6p#3EFhi&RlZ$9P*2}s0>}plb zuexgQ&|T_tM?bAj?7jy(Hn~*>eHa;Un(_O+HY%UCHQL#V`)!@^C+rgd4MR98Lneiagx+?P51N1WU(Thvlc3a|aKMxyXzS zhc`nBoJ?Njrw>sp>2bPhi7h>|Ctd(-8RJ4|I>2cGZ_CY(pi)Z*<*4lX!c*95Fe5h! zJ1)N-Od?hRqU#%Z|D!NeI{ouh^t7(+HZF5C~+ zAFeI?Z8g7E$6k!A+C6j#qy16r>YG4r9efy-eHOJtsrkA(d}CnmVKx8c-(ZS?)feW0 ze+Nd>M{w2H0C;rX!#(?44ZuEq*8>kDds>g9l^~@uLrG5&j~zRflAV88SLEoAbw;la z732N;GSg!PXD8Jiyqp;S(qr3jq2V@doIqjX94p2Ai;M5VSWNpT5xOxc2$God7DnHT z{R6*&n}j~3*5`+y5tJbjeT|?`{$2VKZIo|h% zqcD>``ZP6$CzvXUQ-Vq7vRof-mIT@OJSNQDc|K`-6NgOE)D?{o#0^c+&NH3&JHk(c#R}XQpF5!?z zY#V6N1sJDimy>F1{)qb2p--xhAN+tYKUIBR^Tpz@^-w{ZMYmCwV7CHSVDgf(}E>x%HMRk6-&O8mCk7I)J^i_ML(;^^v zeIW&?ep+xD9jtI1P85c$(_9i$m{u8tDF~ypaWv#cV8UcJZA0R^Pqs+Z z#lZX>p7=f&kiqzCH8s1EP?K1G{luY9s81aJfZ8!QDT24|Z_C#5SHG9;>wZ3QuWE{5 z;-XIzZ=RS2q@ZyZcVnv$>k%!0vA9j1Jh3}_E2rp~s>_sJrU973lb22M=(Ar$qFgS! zm`u1;e3pg+V7=XTp#Bf+8}*QhR0fA0sQ)<_Ca^Rig|W!Xi{OvU)6H@u!kj0Fx{j)m z`qnZ?SH1pgQPF*YfKU_zmeYqU z)HR$}7{gbcdN=+Udck{Wh@oxbqhZ2rm`UFYBP9H;(XlCVO<_pK@F;B-aUx*eH#CCr{{an0Q|zt z|4-YSHOZA+cb~<Ru zYg-7~mNqt7`b@av$UQzd_>Mb1f5;^My6Zr5Am8vuL^Towmmw<8D{Y`fr@)yH8432v zE>yc-+pplor~;Wvxh27RG?X<0@ClXx691laz`3Z{Di_( zHu2|kD^cEF2SBh+gc-s33?0EAASnBQ8NnBBed!Zs0uSj36a}l8fuy#Y5vaoCgkvR$ zu*@w`bPl=L!6vH89)hI(&^&ORzQ_QxP9VnVX{4PtKm+0)5{YiIX?p+%G1*Z9n z*4Vcg@$F7lItYs)Mq_b}__62%4}>Ape1lh3p(r$X!j9JCW!L}ar7M?KUAfw!6JU!^ zLAXJ=_1+2B{_r?$$d{+ZpqV!p?o4xI(Av#QB!{+$p|6HrGP{aeF_rmg>btScD0C(rF0JEtB`k+l1||u9l|Uc z4oqRSuWcOyw3T^2%hLxy&45GZAcHkw;q=}gv4!|9GlGk5{lzE1?$HsjUS>uh-FaVO zBRSDm8uTYqb4RE7MI3YN{FA~Y%g(rp&(Lz(F5cy%t&YvNDd2h@&*i)Zrdl{}omY;r(JB=9pDj9PvAhtS{F{A4{FndoIxM z-*$&~?YF9zPxUMGBU=?9aoNpI_w9g4A*&<8{+<9{WCER8OL2A|@3Jw( zZkF_7Jhn$2w>GQ+J}s9#>YWH4V0vuN z0i=;g|CIpCcGzH4aNKe_xbau8K`PW4Xk<`|lu0crC13T|f)D!79U4B)y`U$%OT!#r zpffn`JA?USbPmiApn(#Hz(LW{GoLOot3ZX3_fKsbjyuR zQE4ZMkB-J~A;M2gLn3L!aLErNXRw;P^0R{nVf?hO9=Jw3(o(wOJkeky!V#7Bc-B`w zM=^?vSJ-d184&oomv5d+qQBvBk(O?Y4{YfZV>GhqCqj4NAG|Jt#YK)D>)3D4WDe4C z*G)F-{Km<{>YMrUBho52Maq=EKq{wBV6fJ8gFDY%|IRZvxWD8E zOUu^arO{pR5KLa^*Pgny-7}^Y*p6)(&WOZ>_k6s8;x^Ods?k=DKYIB#vk)F~>$)GE zoINo+UhK6r($i?FK5_84YtPJ?AVR&UWdN&%!JVJEa_tWH9#cy-g3BmTGNDxbWDSSp z1X^KOWo7j4J$CNdLuLrSbS0yTn>k2lK&Q6vj4O5>(EJx#u`|$&Mg;i_bQML_NJbzv z;+C75|G-V|dYkhFHyJ%Y;rQ`Yr0OWHOpP%+@M~t@_VTF!dO(H0WR;r5v*Xl0CNd8L z4Bm!qI^yIE*I?!aEX5;wLmbi4#i5PjKIa3jyQw|zlSb`3E1n)Y0cX+5`#Jq9>1N6v z%Ur3-W6f!Lj)!r0x8%Is)4-j73tahaf;aRtv{vPRS#Zs-}_5GjO@bYfuN4a5}tke+ypjM6-DWfQHv4kuVqr22?P|JLGJ zw|7eKFAi*HLs442wzzlri3O`hPnl>iDY@vQcb7(g^NAaL!)VVjcQ)%>V~PepPm@#c zZS2C2SfV=HxR~)?#vjDX}DFsa(KH)YW-)9gQvmH6E z8sGPO$Hz}xd$e+&i-Owd)N+om-{RuH_DiY_o+d6j_)A0)^tck9Sr&=WXd=M?^W>su_8sjZXzU+7bD~qHUxz6Wu!I(A zdw?qT7|%;>u6)Mq=7Nw7SKD(_2m|$i$V%^1H_oUL>!=VSIZ+#$94dQ=1Ex2b7VjE6 z1I^)`e@cs9`n|}R{|VN#S>lEyceKTH8vPQD{;?Z8 zSYoM5=Q~E1JIxKxiyGvp(_%$SgM2+7qlrn2?ie@t&Anr8>x+A?^_}Akg3K1|m1twEUJ z=`C98+WSWaut`Ti&P^SeYaLfMS`{)O#0)cl6HMV*e<)#UH3;%b9)K))|J_Z8#+k=9 z!mgmcc=W}k3^ECbz;syXz?)$tDmSjv5nOfd4!5LEAF|G%*mu?ybBBqWUR5O_?Woup zvPwu7#DWdV0`*G!n7aQ&cX7t&t02GIsDFnwh+aV=g>2e{YHA`o#Vt3jIg0w z?0EDcY)G*V3+`>5fI?6T5YqX8&iXap5|ohhD9PsfXyB^s3v3C$L~Ym(52cwzUBFd|jHO z@O(VVb1%{FyBF-?Z}r;l(DW(y?$Nj1>4l@bu`uqs)U8g`+*2^)H_|i!pujJ8c@-L@ za1YezZ$Gm}-+#E|oHcrKVusn-JPlPOXcn3=F+UH4^vP&jIy0|`7EzS9Q?!9+>#q0Z z12^`2XOIohhDn%IgC`I3YV;&}89c$KJNZQWu-YnZcC+8_vQ#r+J{rBP&fdK(_w=cd zVl3M`0HzDgKD|ZR>9n-|U)}5#=l8ef7bcsBl@JLUbTn~{wa3_Q*5^z`j90Dk5n7ZF zKBZd;^p$Dm8RIjDk3Lw3yhH%FUPu6+qJYDgLYG&){<9i?zPD>$t(&HsUM4B6(fl$4p9jTdEVe^Vs#Ted7lAp81iUYT2OC7jq1H z#sUGYQyg-enu7cjVRH<#eTY7Ui3hT`vAgZIzC^C`0m5?00vO~}zsL6Mb7S-ST<75} zR?~hNz*ha?b9-BJSDyBkcTco6kT?6|<1MxWHJTcSF{&`UdM7G_%?DSm#PxrR{eRZ~ z{o?(DlLvXgcis=ITL1Ss{dbt{zey8DSZJ-|kqDQ|w`ruB?pVtW35jvW93@1wraYix zc{aSK{1YG`r$WI)x1{pl8hVFi!i_7=-QGn;ouDIl%gYRA5GZN|L*@0d2*Od=7Pn~2 zj(Kh~IS^E0^6ma)L&2hu4c)Z?VVX1%@GAKBWCtvoueb?9nY$#phwh zM(&mHhByl04KV8jDgmrfk0EGXd%=}qo4*VH@q7RZLkK_jOq_QQHg55dqmMJu3OvXy zAD;`}H}MODTZ~%!*j5y+J~9R&>(Gzh`n$nPzq1qmR^k{kg-w7ezX`l8tgte=8vVA0uLvzp{E*0N zSvy$Ya)aAU@2@>VnD>NEfQxL&(_)q-<0~3{En_{|ZRx3{B_>gciFP`Zf(GdBuekoL zC$4#c885O63C48}XJY>mw{h<}JdtwR$aK4y`_AEsLsuRx-)kZ);zc2o14y=anl}E) zC!eHBTVnBK#9L#A;L7|Wditt|HB<_Td(~`afXrZkWZW&W4}N2w!g<3Li=i`^ z+)Yrz(Cd3mHU$oG!Mlv#7G$(w#GKyq5dy<^TxadN>#Tgj#>O?J& zq9dlG3G{b>DcXO$u0W*Cm*Qw5vuHNIfj=JL;INbgbu#+y;h6BF^?#u8uFx=4l##b8 zUxG%6!pdc@{gw+x!yhxY=&VXyd3wur`YUdZEnGkS_o0Trky?z;)Aas1Y$tdv{5A&b zH0YSvW>fWCHNjpV!QO)V=)gJmHnYOL2&z@KxkP_k!&lXoL8et8*CEA>6cJ+}P z(C7v)m#Nn%JE}nr|&?$?kqtHXH4-=j8xu+iK&$84B@CP#TQC9Mi{3Aplu4!$ z`SK+4U-^h58PV8cYithTpY9!$mZ8c+yl!%R+gFscp11a$R}8r`ZBI4+Dwfy9jbUOC z!Wxr4ym<1ex(N2xHr!@cvX2Aq!=rDx^ZO9&q5Y)`H@o&Y4W(>lTc-&vH7@c;<=E$7 znHpK|>ep`Y=s7X4#FZd#AN~^L#YSIgu*Q^6Ry#3TXP@V(l*-0NKqj{V$*0W@_|+D1Aoe zktDmNJf%8;&0>B-kar3fTg`8X<-M(D8W6-d^U#Pl1uqJ`MKAsk-X8ot)3)QTvG@)% zgEyUHN@zP5>Il>!SZfUYS!E&Bn)*@=#%JF^(00moxsao?{JC3w{sp5iXAY*xC{-S& zo>Gf7UagjjY5nCUx?>)AKa1A9LV8n>h!?}jqY6`_mYkxqcFQ`ciP_WCV}yZ1n0!XT zUlRs1(m_z3NpWYHefF|H?v7AC?;JbNvD~8+`#2JPP4l%iYF$^YC?KNfw62$ej@I?p zp1A&%uaV?Gp_l6*SmUh!0_AD~KX5hDR|I*$lrhG(EHXF}%tP!~uo}GP93sm@#^`#h z{VIMATa^d{`)o0`FC1d|O@pTmjx8*@=B_<%E9e8Lt?r#}A6DCau~DuwCTdH+#SE#b zHV!?Fcvg6+1NiZef86-w+O-yX#!Wpo!1blAZns~YJkp+<8Efe7KbvM~UwCYOKYD?z zH>2=J0zh>DHvQM=D%zx=o(Sc_PQ9E`sl;btyi)*$tNP&@nvs407Y1guGOPH|h&k0f!y5kxSr|0`7_v0QzWDU2Q-7yM==J_%8Y4p) zv1A>=fAV{Mi|!pzN4BPEKKtQg#jJaibNCnbpL0icQzsFMZm|m#1$!#LST*A8r?8=o z`ig%2;679QE8n>O4F(9N_!=`Btm_Lj@2uF>;PXZwiRCOuSp3Q__KUB|63|rMR>cxM z5s@KaPR|2jj#A|;Kr;Wv#nPwl&kuJAyP>u2H7jN#J+CRx%9Lhk(fBp}w z11NL}N0-r2DNw^&z7K{Ag2&fH6F};fMU@N zIs^0xkQ1~gcnpK(L4%QlffN&FNwS&|BQ^dEuKW!?$vatm&{5&ST5xQt;krwg+}7qF zz{4IY7rP*YYBk0=!FR#k=LBI@7#K*V&oC~{EDy~{_}69%?Powy@Bhy7UAJqxcIB7R z7>4&G>+TrQDEQ7Wb!6&nq<8RqolXvwlevj~?gxj?y0`Y8W|o2?8vpEY4mdX6=dFr5 zgO049;tTURTX$iKUw*x0Wm#}wtht{70z7NH*688M>WuwF=6wMPl(Q_m!M>&CN4z05 z-wDWFi^fpu_>eC+2U0#l*JhJ}O8n9u8|cGK?Ah3X2)&Tg6NrzzN8$PE0gS0LUx=3?Vg6%(oWlSatOf>@a*&7~}IC zj9?aFy{e?_+y+ywJoM8g<2(eN0|#&GlCgB zxJP~h!YDk!WKujKmw*rZtqdurK{*uYe)PHbqI`j((OzcZy8nT)8QaT}oUb}VOvwn| zI623o4YXmZI`X{IkN!L%a$T4mkTL8o6ALa2dNQddbCewoP==NZQ{i5pyFSr8FN=i znaRV5cm0WK+EQePp!22cU%lwu&AliZy-8<)ykPGM(#CN@Mi|>t6t8hs0F9EXu|!8o zMdMS)ZA)%r`AfFvJ|p)Z0OKw<(rlK_yEs}K z`zorxv*==s4lX|GbR%y$d?%R4@zZ?L!7^lJql-*=+PyJ%*1c=f`~$d|=Ch3#r}R9`a_*^8j)U57{i_>Dq!514w=wkxo;5SmQNI#*k77jOCQs0p`g<6iI#h?$TRlr zSC}naeCT?Y9(aj4Gnxi7vBISIAlBFQVmUWy{8C=mJu}2u6m^tJu;8e`YBXLMUbrzK#BBmh!fOO&w9t&E z?8`Z{TL1t+07*naRNh7f`Iam0{?xfWZ_*LGkKphPW(8V8AQOlhhw2zGw*J->9DRbR zJ>PMYY$a~8jkw9VgYMd8mIp5g$`s4aJTNQJ%%Wmqf@*wQCRGq|L>#Q-e|wVm12`Wr z!Ob->PbJ8k89Ri6$SJqcyMz!A1umPZ4QZ(&b=mrxX}=Y2{H22^W)+P!(Q-zXrN!RjrbX2h_6{5a6f@|56DZ6w$3;tVZPo;eGsk9 zwJT_4Kf%sSjgCkmnsjIj6Ysd&9El!7lI)GXo=k3FN4L1Ag~j|dcm zfh<|(CeUSAT}06LC|wq!$TYG_?|-s!9GsJk_tT* zf8Sl}`FAPiEUj~;S+{ia-2L$VgJ<0Ny>Bqh=e#>)^tPZHzK!-V(IOW|`>3IJ`Jo%2 znp>_g+Dm}XXitwvrwy*w_84*He`Er?F#rVP*j{Yod|C z5}A=O@)F@@`J9`C*0}g)fmtXoHAy>FgL5!8Y=Aa?Y`!t~tGj(#YKu$TSXeT6Z4{; zB|uJZgn`FMzkp(Xk&+ylsfF{t>I5)iGzQCpnAO5XPakRsuOrJ{!&MN=2=&GIG7GY2 z`ZOz8`Z=?LU+an%gof`kD|p+_3Y0(U2qY^|Wrk*{#>JnmH=p7i#7VB4+FZZK^58Sq zVfUcT?txYord)(hSG>NAz@8;zy~bP4EB2W%Qq?~1V z6OXa>8lP3()JR*>a6>t%i+11yC*bU|5Cx;rEKI(ICf_gVSlC7~c`tnwvx8QF-aoer zOYh&JfKHpK_>JdRxmVyN*I?`Ev6xXY&Y^o~^DL_KkfPAb%?*1bbDGOtE|4d0bFs^z zSt;$Xw?A^UXAsfW9r`Nt3a0he%SZch1csc9v+cWVv=>J^8Zj4^Ql2~91{)D#6ubfp z4t-=&o$=0*bhm{M0W0ut2_J$O7TKd&Xvs1_ZILdP@<#r{6XNlict~>$K>b70Ismn4 zHUoSIKwIz835b?;0E0t^it$dT!5sja0Tey*Sbhsr#k`1PsD11*BD88xbEt;MtsU`G zZgNP1iiJdsFSwBPoq&P`V0Q}TUti)N^ zgi#42hfGE@h4DU$#6Uq?tdNq?IN|!b;PLO675s`d=`qeAeBc^~P&A_AYgBXgToiZ~ z7~bRZfGKgC-Gf0-y9d{4z)`tKXAjuejpxu~8gkwuOUAO!2cR3zmf$2WDS1O#QBKob z?6Hf>LYB8a;j$1qE=-r3XcyQfoNUh1$cK9WlDcd9uX6;d5=aR=sr0J^#C%fHG)AD1 zMEag@tnn?}{)t8R5f{gvKa{f_bA_bN+4rwMan|r3a$TJC z5h|lS(S|%XRxBR_Q(`A~2k@{yWC&RO$QF@aK_d%RsazHK>xLIz2xy-g5jkbDbR@I@ zm%_d-5KY<7j7hU|Dd?$vVk~KUr;9zFk_>uzw9HT0do zM6ZBO;P7`?Tb&H+Rh9#`gFqnSPy;nV79;P}{Cg-Ey&aT`K1aFeOLh&OusqPErqBl8 zCLtDoP@G`={$JqB7ZDFaCT$p^x+S;1$mR^BCzj3*upFsCoE==`ABj%0rWxf;$RyhC%smb%FeC&g?c_ zfPM$L9IJjX=yV%81{>S7E%QYJVW3iMXGF~*G62*86sUq?Z!r68O!*UEK#53t#!Z{f ziZhG~rNazB90icUWmkm`KoL&H{E{nJz)(VDD##v`Xj{d}Bf>vAL%5++fanTz@=x;G z0Z;ysmv6%jF&VnyVv7xiSwTVlbv;feKKone9y2SLJ%yZrj^N;12o+hkDeWdJ;H%{U z?x1+n-bS?iPqm&gwp;nv6M9~avAq=#N zLh<&HKkVXykI9u|Ou=sxmWN$ir)`@s3ID?S`_i-Pu*23baa8a7_ft-d-crhW$=bey z0?{1$58qpS&%L$q2J(bG*3eCw&-&kldX}N^C|;2nX{tY1K}+v4`uJRSF}SDE9!Wl< zeX-X|@>9c)Wv3*@a``rx{CC8SdF6>%_JLbLf33Izl6|T)Q}wG5CB6#XJiO{{p zc(o3I3wW$kBmxqktHL!)?{6TN5{RF133Y&4n`ROT1zr*=wG$w_Edh!?X8=m}2GIeq z9)hwgc2A)n*Fv*L42TkyqM<3Htea21*S zWF2M9FW}YvM~2I2*6}ND@GMRd`8EThYK!5&3Rei=DX&D9eA87?lo)w-(Un&(yW;i% zE-v9P(vc6Gn?FKnFnv=;prJi*EMTbI6A>k!c}+Cyc7(SEtZsW}vfk4ztPZ!yh3MH*(>D5H?ZZ9+ZK(DFyB(ePM4 zT5(&KIem8p74qjROkMHjAdX4$g{w{|ntEQ#t6r}n`bgYJD10q^4hw;RhY9S^a~m#R z|CqQ$X(t+q*MKkzFNW7Q;tQ`u=gFfbdNjmNG?HiP^qaI%UE~6;MqnMzotmL7>%Eb7 z!wdP#iHXJlIRKhrMe9%g6G|-X4@9xDKnbJK=3Y-u*8ARGYqy3*Gp2K1 zG7UPCNG_x!(~vf#Tp@67$Wg8kF-Yttib@xF%X0g-m}PG6{u@Jn%07;3*13Gu}SsZm{lfCX*Cl4Hv5Yxc1p{+tso z=UhX}1D!$8Ln*9#{qle?HY=dxkbsWHDJ7qY*|Rpi?=ZrzawCul4JT2ZMOR#hXB3s4 zLvZXc@Qm2h9Kt|*%~x$}3xVG`_V#xn{F~&gz-bc%T22vA*JWK>y6x6`s~r52e?98X9c{9E`m)GZ_|8eDa|?|Sx{li4Ib5Cdat|f z23)I!@PW~u{MbXsr)7jHZjj_x%1PN)0pK15Q~8X7zb;I{!Hu1OqEt}*Sbr>gZW7&O z@d4_*DolowNK|0Kp^wZc8s5kMsxe6qfDXX!&D20cxv6exX{WwcZI?DYv5U6+2r-JL z0-{Wr6oaLuhT4AXPyh5!i`m&(0n_?`=>hi*P<>j(ggRnB0pOS3Mf;7G8dXXvsqFwj zR~ZN5XvRa1YW#`mvUJ)HVJb!#!6T=aMRf^#1x06B-sgHC=GT)f&GJBPoNeS5c$V z?tuo&{p|H0WY)~lWNt3%GArnC)p>h-nbDseo3Sxu2E1v9FmQ@@1ihi5(UDBBJEVs` zS>@5-rE$k46Z%ISn{@1&{?AN~+iYN!3ny2(a6|9I9Gp4i-a2^Ny|L#QONkje4h|ht z53Jp04c~ax-F2A3vo+V}AWrWqRK}mYBuNO7b+e9cxFuOuchvZ!5v*QL@_rqdXuK|N z!b=v<0ZzrALybrI?#M%iomoA>@GH1XPNM?L0%leph~J2-F-0BbCXHVmfSthsMB9{{ z&J>`CM7uU)^zc)yhOPuFO7;cGY-{K01l0CbLb36SE$s~HAUTzzL#jYOM1I6``Rz21Zc{4d=Yj zaEnJerD?eKoEK$U->{9yR@#Zz zkqy_Fz;BL*uS+(S?!3|0^T{&MSRMYn7A*2Yu-B!j7;KiB1sD~V@J7KCELl9B(bdmC z#*CmbD!AI5ZorOLj5Da{U4o{r$4kAHRtm+~{8Tya5U*IEmT&Dr_<9q z3t*{7Txdhq+!Qa+F^GtrXqsAVYUEcgXf)~}gwRwqmjUDfV!-@MxL0-p2{#mm5)-V+ zD_Rtn_%Kt8*!+SQAMYEg>bKEUghn=_8Lct8A!&#U2tv(ILDEt+`9(rG0qk1$%P?wN zw=1FH^Pic}uz}Ffu{>xsn>e>hXEkTScK0NHw7A=87+%QYUaG!p2$*p!b+!0il&+b3v&T#y8H>17$w$$(? zQPOCy1lw!|nh5o*9Hz}n3Sx#cGEDFv;TJ)n9aQ7b$d0UN z@{a^^+-R@)$(caOqJ+qindApdjLEH~RuCEvHZMDOu)0^^2P&o$vA@oCy>hA@hL_z7@6 z0X_r-m;jzd@AXQ&nrF>v1V+K+k>JTdS=YZNJOkLHxTCAOkV(v{QMP;Hm};ylE}sY!q%V7(4{%7&LgpHlf1qN5mPfjIK3AO)`zF+GDyywJ|rP-$p-|HH%Y8UJ3Whirffr9Z`^6z-+Y=ccWxAK7Jc$IcybLx1pEZ3yQ7D}Yo0Zyp^k#d zLvWeAA_6loY;EH#(uv^|Ho>ALz~q+`h+%S=a8j@gA;E+YjLOvS*$>&)E}f6WsH*5% z+Sbvmu|$X1ds>@U+qW4&IfcY1ZXX#!pDWSj$8x|TRu@LIVN~K)uoRh%{#y4XK^NBC zjAAQEf25-O~a5mBO(hR z#YuFwg{LIzpEZ2ZqWn#$M^)iQn%-6R?lsMS%<)ssklHkV7Ty%UDMTrKnGtQ7930~F z9@(#GDBilMc45;Ee&sh!**io}=Jx`JnZsq&<7cv`rCE4#TvI6mHp2*w(ha9NJ&{DG|jc@*X9 zRaf3RzE&xFKzeN(FVY>E4m<_V`A~8cJcNsLNlkCJ)j#2k2w$NW=y<#uvYaw`{BqaO z1R64grwUF+9~iY94WLNU{PUmaVR%^tnKefr$wLLV;ur=U4&0tUExF7HUwO+VUOFPG z8Gv8$+vu-0ueNV90K=^PFvBB|Hf&@x>Qm{M9u5sD)13gZ@uY_7BOc;m+ktn(39UlY zPZ^Cm6;lZ-Km7r$z$+o}3wTDVhA5{DenV^MHFMOVr^mNaj{&16Zds!iL3>eGmseOxQGD!ws0dzB~T0-$yj1>|5PWKBx01(8%QKylV>h5&W_j>St}^4U{Knh=E!&8vNry&&$WM&q6<arU=U2)A>^hkBSfm?>H%uV|LitxFY>PWpZ)zg=`Gi%8I*9fopDgiSF49-tz zIObC?=L~(cwMM)~&cX;qrk>3yXtI0@ubxc$&4N{6%GX-^lWKU*fYh~HZNIYzwm6G_ zT=1&7WX%9H6PKOQTcNB+jsW|LGnp*K0!6U-DTu9y^81&YJt zS^48KDKHJTWV9}MD8u!qm<61(-2&b?vvM1b2#V)5{%GL3b+-8qZ$KW^O*7D6g|^rD zi7Xhc#NCekD#8(-bx?5YlNYP#tL_P2`NL6h8{Q5u2#SK`SqvAyIo+LL1|RZ35Q`}1 z6BOge{}{&bN1kSqB_Kz5_RUZdv;vC`>Oma1B%@Lu*^E4e!U8-t>Kq*G`JBGuy@jTT zG>PoErYFN7B6U=Y$1_j=;inr4I->F>kSzKOjO&y9u;)gd6@Hf08J>kyZpUy22o7T^ z5E01yf?Ia|#f-}R0!sWORAT@RVq6g+evO_S^~eAvzla>ZMhwpyO`#`#@$;R4L4ClT z=!uZhq=M%zzX6vx@}h;G{vZA>jrSB9Vr>6PU0XA?TD*a)SANt1wEytDbKg7V`li&w zft~v-1K9o1)mx^4Cie5$z>fS15l<_JEZRE0+%lFIK5G)|3UBE)4F5AKd`2U~4AxqJ zn$wU*!Q^3Z{m2@)!l|OogBV5*un-m~l!IXa2m$4v5-A5}r||MKTp{o$`HLoZY8x2a z+O@#mEzt~nHNqHa>K#DjjFVzUQfCHrPapN^5Y^taJdSb$bxN6`V6!u|7U#w1!=jh7nDh#*!};A%va zMag}7j{6-8F8nNxa#86asSh6nhjNjA0OvGPgHt2T8=uAVEoqaChl;@2U_TRh^8k16 z@tO`tb|nbZjWl{f3ymVnEn<+f1ys-oqU%8)Ab4PxlxCVH7YIP?jeCVzzr@Z4KqGb4c^f{}iN zO7NVK(e#8WV*<(lzd8XQfyGn#Ns-t1R6grZx)`Nq&<{j4P354u#W>k#x*u)ZvIHy+k9gW84bO-{2$e4*W`wZ9G7~pCjR1 zG+O8_Muk6>k^7Cp6%3;>rqX8Xota159$yGwiN^@?Qz58G1e0fGM#1Er z;K^bzx$4Op;>t6aELcXYVvVR4UXGkMi^vnPZ9lB$&9{_#uo*#Uz^te_G7xKog)|R- z)b{H$01HYDD*9**ik_zoF&qQy00N3gMG=A(I5>(^87n_IadG`ZkK7mIL&xUq1YhKEp&(Y};crg-(CA%=~{Tj)k()`jH?jZ`-l zF=7;<54R)}nc_18zBJ49{#LP9ZzYoRI&r4*6(4-e4RSFzF?V2APb^RMpO(&qw z@}NNHz?KKP%TLA{tG8Bv6?=-=d(}a5%P3y)8QliMVR>U1!yn<)$XeNsgw>F1P9rLq z%*gQas0G3qs;xY|si7FK0?Qn-%GBfY(BUt5LLI0)%_cYhtc?aD&=4B8fzbif1o(lH z%>Ymg=6s+^Do_Hs%P}t?5olFF>k9z_c}54e9JEoa6wBzFQlBGw@9Hn%%mloh60FEV zgEcEoeP!yMc!2VGeVRT@_8TJ!Am1pJuFwsQ;xjQ6JtH6xsnPUMPt)vKFrn%#JJo=K z5q+R(KKJDp6I?BJLRX7%4Y^)5RW{x&Ck15#SlL z_8F>l&vQIh!yBEoK1m6&-aHvTJ$382}R$p4ak# zyZKQL>gy$*B^~~OFD@)`;!7(~t|GvK99MpLjDAo*i4UZRIl8v2^w(CKY~ zW*t1zJp#8DMTKVcqc=Ck5bEiycj;ysX&LPg=|tce*4i_aFe7qJ)6aTkbs8Kbvc$ev zVvWxB-B+Kv-lJQlv@`zi{wM1c^z?O_xrvFKRW$gDnF-fCx#&9o^M7=`kH4e?IPTiN z_m*pY=LA=p@gR(}{KTJlR-F3A<-t+jjNosu#PZ+@2ZHSQ?+a!v(ADxl&squJh84at z)`(>hBbgCi4w73YhspiA;SG0Gc)@DKYfc3^qtiG+8{|odT$L zk$grM$k;XVgj4$&cX0qYU4%PV+0_hh}d(H|6B zL>1o!U@?JENmC4Asm(WeAcWb1bj2`<+NsL^2bd(c8S_2p&7d znZjkbk!F80lHxA3`TzhkkT0 zNH+zAxLFTnTHUJZo~}VSHfzZHK$S72`0}GX;3qfNt`LXOagdktg0iKuHz~Q z)x}O=O1(dB{ZWVd9hQOtUmp(n_SBXYBp7jEZC-7klE5%Md0R3t= z^BrOJc;*r5j==I2CBq$s156}RB~z`7Y>&b>zY#PeA91vow7#QG6`|fPM)_0k)7W@^ zY*M#5Go6!AN29*dY~*~rh17Gk4ZHlp4Q|j#Y52XbZ!tnkMVDgTP4P-di{5_o^aYL) zvn9xdooYP#D=5d+KmU8z+&$~Y-aAX$L>CW4#>K(iOzTg%t)H=`KS(&H`sMm#xA~vG zcANk8*RJ*UNt+ck-(y*_iwh{U6j0+=+B7S$-2>bR1RLjg>F3OTS3X{$bK>c)Ydqcc z+&|{wCP_msG#t@@ENev#Y^$3PocIgNAHP|jd=w*1^mo};nfO3aPh3*apowY4?0wn^VZ5J(` zoz-(wwE2nE)v|RF%$c<{jsk>%9#0J_JkZ$d@~EI1n{_aJ2aG_rHCGD6ho#G?{n z``*LzU#o2b#6)GD+cH5c2fS^5Sva%$B|#;NMno|zrQlf!kkK@6JX7WezeqEL8#)2l z&;#BmnnT1a5)jouv?Sv`J;&=fMQg8f`#H$NdxOQEqh6@T$-dG$ZE!_fv{VSv@{&-G zk$mugi$gAR*8c{h{mVy`1OAf?`Ar(E_|ku->Wzsx*Eq{{U}}^Bt~Gu4${p9ebH_EN zc$nkfBiB3#A2fa+7X$q7zUj99?lU?K!pYEBiy7$CiS#}r-cK)cm*GLz`T?_oAD(f| zBM2u+TiKyQ(-dEwi7KX+3z%a6EU($_cJ1$-Kxp{b&J+wD@}d-jhp84)nZgbpUD`1fvW(T=ld@Tejx{<2!SBtcvT@I#2|9Qo|msymW($U$D0SEstUH2#H=~(rB-%wG>9Br^+Cs(Vy+Y=4tK@ z*tbaIrXh+Cbpm`kKWC}XVA;Tt-i?nhx|x6Xht?rkMPg0geDk1do;>XO_iiGGfWG#G z)Ufp`%|7Hs#8W=I=emE&-+%ttwcdNfwSV-MYrf4($}`lDcwe3ILWEIhh|WOs{bPnV zcz{lU4j1XhAn6ovxX6Tt)=7>iD}f-DOmJ7g=BPkC`UsGDjDjZ`!pI_wxcbV(Z-(MM z!f&M``8MP%WQ@l^D$fvs!95+F0ccEVmWLm9laVo7R2#K+0h)@NV%S*OaNRLv1-@-t zd$%?Z;Zm1^mRt%NI|0R3(ixYl8-wmFU-DRaj%vjJ-;VZDrA*+lUJpx-TN$nJ-ikO+9c78%!#_1L_fX%Hzm%C+@EvcPr zz*pPXrJ&{RW5>#3b5o@AzutPcT(doJk<@yVirU*);Rzz9d)AN;=!_vEusWk0@VTHm zpYlnu;$tRKw@d|+Jc3u}ibO_)}{0&oUmC&NrQ)K(`hyLKw@m~Fh z=a3bgM*zv?rWK)~BH({6H2mQy*LokJ;T?pAdJ620goa#3g3!=34b@_(^y0vNAW<=* z=gE2w82s~3juPRcV1Y#Ju!3_Ke+(NvQaVLU z#`79Mh?Aqm1ClWt!)B z?PrR23FD}M;IZT!|K=}w6^K20OBx+k*<=~;55INeA0dlS2PUKY<|PdLfG5rW=3@kt zR3V#bcyIqJUNFi_o&hs6$MOdGWx4*$b${|RxAoKCxaM034gcV6mxP9rHE@@m8O5j0 zOtJ=+7fpnQO@xMnr>o39*h;+0jAu!8j?PPW3u;yXy2UxFY&_NQ3vIDznoog00R%I6 z1$i{AhGNc9VdXIjo?yx1DdJ3nq=)PrUjC7N*;NM!tfiJE2dA!r@6k4yw}WfQ_VavW zKpSSHpve+K?YqxlKWJ>JlKNeMlE6_BNI+x&mX!XJ)!qxm<;hV|m}2zSpywliB0l5N z7&8p9Rx#Gb@T&TXdC(G2j?7g2GPtbY>gQ(yLQUj%3?~c-zKW*8CQ3rgjGSS#m-bbm zwLPP~-U4)o-*N5$Yx`N&-V}^2n<}F{VU;z zxN0QHa;2jwaj7L7ElB^9Ra*6-a;RnQ4%h)R;b3KVxHKngMWexP~yQ8oh+R1bz|9-J;Ox zz%2w(LKB~s`D|B}R8qfG5SpRNQyBgeK_23NcS`81!ieU#hKrGf_+y;W8NCfIN1!Qp zaOPgy;{(Ym9$6(VJv!2cUSM88ihqDH7_y-)azt zEg{5D6EOsrM4}g<4#0N|qSIv??;!jBhk3T^7M%tilFeRHWILCK)gbUxQ6)4a?SrNJ zZu39fcka(WcJ1$+^~(cB`~n3gYxv?P<`tb7n^$)CVCy^`$JxcyyjVR8jV-NYMwYpb^;=lv6^^O{xEyu5?|ym%mAn# z8um2%+*)~V?NBjb3iZX0*LbPcTug%~0?qKrV;l4Vdp&^0!-wU@!h-k^g2JmKa1UPg zUUDWF31TrupF?*&D0-_zqDmlaZ7ogip*KS6YuAG_cZj(!0>M~E3_Aa-#yE{0<{0`% zXC;sviaVfH`~oca+3WwbZx#i!9)sG7pB^QY0CH~WgC?6EJh&aJHN zrFQ|cRc5}*0NJIfMBf4zwI>*=cj4(#2aJ- zzN3Y_goc2wzPtRQJNKim@QR|H4Dv;vB8h=9`ZG?wvFvdz(^p_ zuqKj~%P8DYbQ7!=0H=9DGNT&uwHCK~#8ri3!yTHEX^+3bEW@?)J+L*9y}CV2DWT zjPx*wD$y89M3Mt+Jn>UntL#FK#zID{NxzYtoqf%`6WTUysUeR zG=0KCKpd6$K#HS%Slbt^T~x$#tdCh=FPyOSYi+MRSWZyEt2zpeNTS7`P4j7Rtj$cQ zcj-5-e+!`=uPXBj2Mv#2JjM|lWtNO>{KT}^ag-5Ks*&(-5efW}iT8Zzj%$=(*f81o%1Xa&Uu{zc$OZ6m6h^GhMH-&;35Zzvw}Xi z6%DSiOTt?OC2tJctUzkV5;|J^&>?7K!RQ#E2CX?0o-CEXxOWOa3RkeYN#W&@5eL4l zjf8$Wp@A+X{RY~WCJ#|(sSW_4ZEsa=-P6-ACwe#UKi}dyC%**<$aex88@eS_T=)*) zIv$Jk40Ibp=%X>zN6o){yjHGnY?Uu}O*D3?Aap0-)-vlcRDv552$wX?)zi()0^AxS znMuMT$08q%#br@i+C!QH)U%vY4m9_WU4IG_!llYK(l5h<70m=x1=IH_>A^$231%!Z2aRXJOnIc5izJSi6EMKc7+mebx8+sAy6|>}@8m9iN<4~ZSL%D;g@G2YuMi_x%xp|h+UoXVio-i;~fG029`lqOU z=^_t}8fG$DfJ(agjbDDoZUD;})6fG6;aqV5Vc`3xUGHx>RHVkGxur-%c0Dm*5fJD{ zXY>zWt!ylxD4SwI!w+-QRkRHMuLrLC7oWJ+cUd0%0kQ&g5ggiXr8FhgIf8FS8HrCwMOCDlDF;7)WXLQ!K`Y#`^ zmTP#Iv}&GtMgXWb&OxB-YilY6-vRvi$3HGV`Q(%SMAt;K2m^}#WV2a5UGAOrGp_9jI`6HX%LSiyW&u!F~+%m^cR6v-o7jYD5l?fd*NEf zR)YB8!Z(`oOO_FS_(x-5d?!!|F8>g}(NyKq$gMQ-Dvq=!+}MI^>_5X4p949(j-%&x zZKrD6*x^Iw)q+`2t>+e_|{QPq|0Co?4e1Yx3 z<18K6@>2E8?~pDR;o=?1#N)e*x2Z)&HwbLKlL2|mcj1by9W)H07a)GR<#wV zZ};h1kEV@~PyA5H`kQO6`|^n!Up%IWK*8)jj4zpMU3iIJ0>>GXOvSoB|0^H(a89T)I_DW5YN{?EJBDZ=W z`zwsXjmiTHk`o0m5|_Yqf&~J=#$MzlI-|iqUE8$=&Q{uT5{S9`v1*-V{=nT_NU$gpWeNt-lM_Ez&8;M7+Jb6L{|oeG#{Bk zlG}zMy)UmBfz3fYhEa)$j%f^DBhx6qipT2)s)q}a#E+3-CZNJ*q}QCl8nqp5)fAs= zwGJUU-_I0(7gJ9?gJ%2oNYRCx*7kB5F>pw$ly=ru{b;X-|KJt{gEp4!-DlJM7$)Y0 z@f96`o?x;@uvs#{=&!Hg=qLEYYr#vujq}JREYpGWUl)Sd*5B>hjG_|$W%Ojt?w8KZO`t3^a{!s>zqO0;u3WR zJZ55BxB1CLYYvH-Dz7=;!i)SzxPpmqgU56PS`jxmtK}PjqEp8MWK{-u^1@PfDCa%g z{W$A8;h5y^64$~bQ&D-xEx-pax3n(T7N9kLwQaR=bpj&K->?H{x7+>Atu1W@3YpzM z+X^hNFZG^qD5%$N7CaOx4ocU3{+PC*-bbYA045NOX&Lb1mLKs%+sG>ljO?I#lPm@| zG(Z{DqgBGhu;II-A09>!ygEV4DS+y*7|Ba2S!0aRegA1joVQt19k=Z}^_+gR_d3;{ zj);jif1+b2@c=!0<_1?$(bY8n>DTz-uW7!W+sB?7TL>@q0dM0?@Z1PTM#1bS0^|-R z(E&+3ZEUc&&gg&WD2-NIf5HQaj$!>5=>6*jU~T=yk#-v$kFM8$de2^>Ey($R|Nak| zc0&VN638_X2D<;WfRYc=W?l4=(iezXoRP4nXMt^mt-*8Lm^_2&CjhJ?z_~jp7p*P1 z?tlH6>;BDeUF!m852Rf5&QYfKVH+{(Du{&s#Gg6{8MaoNA0BtjcaOO85f_)BWYoWf zwjtYzRlyyJ5g6aS^`BPgrI6rX);3nA?=+9lv*v1bZOKtETx=qo(;j__km1rYMq$j+o%!5%HqDqu!8I z-ZBzH(9buu^{39srvF62X|djYj`3c+ikwC>ni_oz%ukF*ZpFo+oQ+S|68u-34?uay zIt^7krq-?Ro^e}$@pC$S(yW>yQ)fTAy|1TP=RJ=z;YC`JK;Ty$fj~*QsN;H{BUI%? zV)G2AWbzTEoDcu%9_%Ymwki&8$>~)&*j==)UKG7kZ{3yS2!1^El4OuWP+qeXz zyF>?|il8=1z|F04<;tV2XC?q9Huzou*g;*8Du?$c4#CsxwG6~ zdD$5}o11LT+0K!60+0dp5jeExd2e2sDzoqgZ`%I@464Z~1#p)VVi+S57~sMNJ$3?u zDs9QgVYDhx@16V-Hn?gLc#sGw!f?Qu2Fg_M;G4E*@2B{x*zj(bXo8zh@kJ_*0;&kQ zcdvtPzAneO$Ta`n4MtgJ2x=U;G+$vN=k>IUW^RNk6S6AV%@Tehxk$@8f*3I1sDd*( zx8_ixJ$crrIfg?b+>zeDWD!W)O@BkdBE3MuK9Q_C36yJkIv;THmYewDh2i-C{93u!nZ;=xXAD=TRgc38w}vd|HoP1r&k#l*@up6X9g1QfWy0>s;Om=i^WWcc-9KA& z?H{s@_ed>g@`t}}be65-}!*JnF%z>Wz51v&zj zhBN|SMm9GT5i`cNc&hU+-wHe+2qu%`kAexO5?%ld8G!RR>(R)M+0LMe;PB%w-1zs-TgPmPVFp#` zj=*y$;#~fUwJ5V5rGFH?kuZ3*JdtNGBk}M{c_&N254h$E%L8dA@*DyJSASti_pg5A z+B$^9?m^?sqK%LyCs3J?S60-Jv~iL;5>K}l3*2JFOUrg3iMtI4bOim|EOj}iY)b?! zdGgL6uoPJv^81Q($t$EGVD0=d`r=t(_|b%9o!gpDlUONosS{J7QdXN!d6u1nKye2^ z34OTSf3UGRSlc}_76pL4t%-@=rl$X#{fQB$4nR`D`T6NRQhZJ?mbrZ(B2*!-0=|jP`rzvt~5KC--RdHfoEnSPMiSlQ(?7zNY~! z(UGyX*A-j+X9zu|Sfcg4;?!D;if_&2a|A_vfJz6moCY$7#yLjnxW1Pcntz+W{)&@+Uvr$7y>4i)`AC z0F%@2uKTlJxb8oEft=v9YyZ(Z?2H_t>{tSE?!fLeRKAI%O!(Rsqh`vCo{bZnqd2+X zn#(8IJzy7s3rq$Nkb7{jz8IquvCe>cAQR%>F%9ytIAVl8Smjsww3D$sMIKQSYuVb?@P|MH}W)U@zF$Ha~JcEeBGJsRIBw;7mYI z(*y*8LgGq5Js|4JOW$-u8XDT}|@d)h1NNIGvF13b!TogX_45Ana^TNPrA zUX_YpK0>`ziaXc7-_4nn>mSmM@33} zI=o}2`VO%CTYgMOp?nho!iZcwjvZk!{R)fO5zl*j!XXZU>hY){YPgb?;Q=~omVPED z_$`N!&Ys|fqj$Z!G17B8fRqai6FrEE56Ox!5-v6`9Og9RL9`4vyrL1ygu&Nz2D;yH zT%7@Vt1U$t>d($begW@QX!Uf7pvrke)BkCQc?aMoCnx)>{eI6527!#|aEtB1^7F5Ik0l3KoNXTD zYyj@ zenUGC4K72NIl|iZ48pv#Y>TjUr?tAR>uK~nl4%*I%#%^276axKasD(j&@o&I_U_zZ z&zY(I%`2$Oa`~xF=}pgoE?m-K;f+%DXVls@VPtU!Yw|Kn1S$>y(OE?rx`ZPW@o3Zq z4?LUjPiYYmm5=oPZ$EUMD>rN%8!KkYfs0&zQp|Bd%EB?%dY6My&(_@F7F&uu zmo|8Ue1*DS=yUbA9bAl`<>N`;8z4c|5 z0ADi*GS*YTTK_L^_Mg#apQ!Ds4a1pc^nK0%^k!(|DPAm<4q#znq2GD>wAW*;pdLdv zicX9*xzDk?@@TdH;J|F_AY){Su%YO2@~BHE(3+kjVmcMoE=~OpeZck@Lb8Nzbh<}RQJGay!Bsp6E<3-v=z84LQ*h^>HQW$|MT6a_CXykX0U;x! z3d~fu%WXuPU+S`u_lCki_SvPBv-KCBvNWKhmAoWpepFgxTzMRVSvg0~K!(q@d@$VT z5%7KC2skte50J?Th;W`Vg}>gjyRP@Y-*b(h?B~wI3tVBw4abKVQ8hc#v1FN8@4U;q zMNIPc_w&p+7C#3ibpHGhfh~}E7Q^dqzxkg>>>T{wK|>N z!tvw%+qZA0=qeq6)Pd0m>`gQ|KkTRfJ<67x>341}ZQXt6;Mj-88ky9m;5WF1cIp^H zB5|aQlW=V>S4z(wLh{VEgs!wovj9S>p%`w8KeJGwEz!`DI>#B z(O|1LT=J6#qTI%>5C(pPAXUpK83_ZA?qv`Dr0f0qa~cHkXk1Ce0xjVtm>d{IoWqO} z0QC;Gj;FAx!HYmh!6>{sEXoPcCy)|TiNLV?|NN!f`pe(2eTZVwkI^SMrL{GF>Ijr) zF|8pQMV}bg&R5)0Jh;oX56`(Kmz}z&Yp#EnvodrDwv(XFfO{PZ-QFu515FM@&+22A z2{Dcg6qBbNkHPazu6F0HMLHeLT4HVy~LR5}2lrV-fecC7rBA2Mh~un zDkDPNiYZXT7EFv^T74?e=M;{P;qqWcAH8_H{&klTj$)tU;n+GJ7~Rk1~~!C1I`op14vp%LO6B=k%qp?|7bKi z)B9PYJV0k~Xg9hN$2kka%;4U0^b437Xqmu~Wjm8FPW@JgK>isW@vc0#FZPVI`E&A* z$`8#GpvWE!^A%`?Uu_x%AlkCU6sc5~0P>t# zTH5OD-P>yn23zU?pwexQH77s5*LnD2z5mUDUG1aDPdFIVD!K>)bvkftelcvPz`bMv z+V%qwRDA*_O1e0(FR6h8pLB2FG%#F6mt9aNX+_An}tm(~$d3xI3H9`GQDp&E^x zfN_}OWQ}NeLky}+>;&{>P1{>uwIxOS^kJV@WP-NV8gCzAWMW$S=mASJMpuork>@;d z2^QkkM=%*<(p$YFdPLZWZ-rjqyaEehM#1Ez@>bQ8($6949#?7iKK+#042ne@KpOj_ zcbVQFXDP@wFv2&hBXk6bRng529vXSoDa%WBq*$DBE%xgjcNdf^yr=OE*LB@vN8urz z!b_HBeJ!0pW@aE=13Q~wavTu|#EEn8gk>H#E;kNCOS2Qf7_1r$YTain&)AKN`~OY+ zmezZZKEB;~NSlr8e@*|lwEmx9c@O0Z_w^ZoyU$pBpwrpP~Yz43>xSbjh+%OMO73dML$dl1dRVun3h{h>iv zXj(tTkz!8USw+?;FF~Kaq8T$}XaSB%Nx@=v{eUcOIC($%+OO{!^#|)*p)JAQ6kWeY zXjOuId13)9SQcM!XP?-YSt$=0$S{I6?*xoD;PrHfhXlhv;u$bF^wD3$6J2IZS{gOp ze0P{^(ju+Btt)rj=Jng8lgb-AHVZETfhM+O02xUDDGJ$QLKTFiMCY^1Zt7qEfU=^D ztZcyNPP!)V0`&jGJ(gyPq7UnP${{dD9V3Z8f>&VC5d+}A4d-77rcOY4B*EQ&>ITB# z-t|jdRes$y-{7K>KYovkO;6GhNM1Bz3z6UzBi12jS*KHrn%OEJxbr~|q}Y9jbkHSA zN97}qi8C`OpK+hTGD2tF9Ial7Mr`?^aJnaP9$CZx$KIPiTXI}?es%Zz-s^t7FX#>`7I24Ys!*-aOn6X5SD3KDEp-4zv z0D>fdMmN|18bD*~?e)GdZ@K&C&-YYj-K@HGUpGL21O#OFeU*9g z9jpoqOm(3QuwymPpNx9i0f;crDqUr^aD8z6Myt0xKR1&a|Cbp5i?>OgauWi8*n!3h z&JKVcq%nl;GA}=Wu6y)jyXv2#7>G`K0T{G(?s&BJzE4m9pyqgTu|>pL_l1xAK~%VM zgqOoOXNEU=-8zy?%&w<;e$f#l+Au(sfDRRP+bY%R~m{2RmyoP1zl(&^vp-e$6&ai?%E`NG;ojlXK%t9N6 z7Bip!D8|6J4mBPve}cn89>x&NK_j*#+J6iG6d7|aPZNv)!XhO3C!TSgxzvWA&~m^8 z-A4dOU_PPC%cBI~#H%zK9#B68PD++g7@R#C4gTK~QR$97QRNE=0**P?1{|{yNOM(P zdYa-*?>tPA-YnH+BQ^vGoTl7^5|_aJ|8K{AdPfSHdl7|H6Z}nV_|$ z%$^>EWw>meISSh_{J=m6q^R3`4`1jUMg8wmJQ0!lZ{z=ViIZO`g)gRm<_Un2#tJ>0 zR0k1YDItkVwWrRs7k>Z4YnIm5iu0TgXj(w)JVpq{Qd*2+Ol)sWNp(cn9B0z0cTXAv zaQVgTVnmJm^{Un|-P_s2`F$y;Jw07xd@A@XYxH0EsZHf+d=xW2U6TZiRDJL4OZY&} zQ}N!ZC_bDiR;)nKX#AMp4C(1+QQ{kO7#Aw>FA^)#mV@` zF1Pj}R_JMNT0L9V31lSoClgQ5%W$7-jI0R$SB4A&USw%7D=XDY$!UK8+jDhtaR0|Y zg?VUBs^&3)I2#M=j|j!|QaGZOIO65>2ouNTu$LF|aLPGmjnSTwT$UZSUCVEmy;5LmT4H&YtDaJGN>{8E2m-PYO%2ND2G2Wn?v>%u~`mK$h>T0mjU zEMmM3Lco^YCN-pSDR8S0J>{{$IQKkXSgH6;+fhm}J{4+=e`tTy=Nx@o3R`2AU`7Io z_jPuLI4=>hBuaKmS*MWHcynC*R+PiVO}vrydOkLXfa*ZBClY#GMJS#pC-xRMY>x_e z+#4I@1V_`*dHm(DbXCNO!NOJE+r^DTgBx2RlU1HJ2d zx>B|z_y6oPf?#K?5quU6OoxzQ3&L5CvJ7HEKOr}_K!qsjl zioF4V;F$=CiLB!n)yw*yq1c-Pb5*1i3`g0l!C?&bwf9rP>c|P7EM)mox@W z`Fk^*o5WjDd8gIUh+P#Shzz``5=;H(y06NIAF|tiZ3m<3QcTBCVEOBha5Btwn+Zr- z(==KJpB5R{TPl`u@@R#NMw#WQVKLWu+14UR1!Ymq;1xE}oTq_lne0SA_5%$;92Y*oVKE! zd3HX(gn)4K+IE(i%8*-qpioDI@x@Awq9Wq zcafvOO3iY)+-$eojZ2p4kD=`hgvmAmR6 z3NcoRmz5uzOOdPC%Afl!8YFe?dU;*9 zE#u$H51zoj0t04WVQPNlJ+06aMFGH2XLPL<)j!JYgSJ0wSVdm45opJG|G*L8l+)** zmu~_~JP-)$!1+@!1^A_4d3Yf#gPaK(W(ZT6eYqW(6plI{{%Z=)1OX@T>U{^#odsC7 z1w}eEMQbzSjtb(QzNhVa{vIKEb{8_mwn_Il-VVh2FbGYp7^&zxyrJhM1B zu49N8b#wg;jgRAqI_DQm9kE){i~h{c)s`4qjZ{55d!GA`{B6|z+MjVlE!%S08*Qq- z;%$ttG^#}Z!<$D1gfI;!Iv0u@s0gdl1O^t650KY^>wdqqkfn`OAl*3%b`n;^EH zp1PMBT-3RJJ2-i#A)(7W>OJ-{$;c0ZsIj~@Dya@{-T4CMCxROFUP;t{ z@t$~4ym(Db6~h4L#o`1lhDigWRb^F>PVf;bOLa58BvevEI`;?gL|qytwk=jly6 zgE%!(+=#l>*spj$OL7%W8f#?U`1d0A560;RQylLW|KxW+g9qUd4$<&)$?p@&pYRIj zLbVV!T90lgE{i6;USU1^1DFzwbl5EAOPr^Z0PqNwIES2qxyW3YtD7YK6pzo>o-R!a zHYJbTJSX!o=0?^<+K#*f1MHQBsQoA3ikkoSo7{qQ3IjBnn06pa5Kw`stO;0MlRO1a zg)?bf5p*c+$}y(3ZCNri3VdYo;`8S^tjH=f;ZfsP_|^=7)lR1?UUtbR9@B;Z(fRY| zH5;H|K!u$Itp4MwSvL&e27%G%83u4)0K12I2UL(DOge`hpoHf-m4qYY~My33! z8MPp7>|wXzkR`kQM<0&*uW|YgV=f(cZKMq^l``G%lBi6^nczgCRD3FsP#iaKl{Mdu zW8C{BXxT6kx!DNlB6KJT=lz#1dq*8Qk7*H>cP&Ll8H{exGVMxBo64_h67Bx@3G#&;dWSl4S zK2~X27?MnCjT!hjZmai={}^>2`MaopV>#~e6-SS+Ha<=o^mHkB7AFj6{i5MuqLHE# z(9hynuSvX56Ffyw@Yu=Ye}aVm7$g6$BcOU=xKpC{j}I$#a8&IPMnS3n@tV$nu6g<6 zL3z*IO!HcKTx5G6G!BhDI|pBhhZ~|RW@Kusz{Z;LhxcMEq{DFnDwTzBLzfD>e0@1X zyga|*k;dbP&pdpC1$ks~ls189!YcL@!HzTwxhIfqoCI7l-tEG}Q%VjP zRyy{d7AqgwQTrJA^N)szYBIz~wPx=J39d>u zotq3xdU+AjIRC~q=9Ir1_4Yl+3aJJ?K8uI6w_gKYRiOKZX(9@_h^g_DDbkQkLgkfm znRp*(;3;v2qw0y{J;_{b^%8kbX*uPmxPBXF^Z(kIv8XfM=F>ZJDq8;D;|NGo2lFT- zRTD=B`Q#P^tZ8sZT_-D#7BL2Xpye7LIrQ!=jH9ok> zKi})~!dk@B`TC!879DHZ%dBLxyYj^NsJvENAo0S}or@RF#7}XV_z6P9htAVTV3~Nq zlkzAoCmyJE;6a=xn|cyRg&k=dXS1xdbT2cnYgp7In}^Sa1nq+ijkG0~m6mFJxisD| z+<&`(u3m;IvEC(i)V+KHp)KJIOol%h1Mj^pD&Dh;_3zjSG*#>0BYaLPkKxds^c2pt zUq~y@pGQ9h3-ZXOPvN=uz7?2o_^I$#Znh7Pw6bSs9p#M$T3>oNYW?xwMgz_fu(K7! zd8*54&e5{U08eZG+viy3eg34ae-Y1#_t^G(=HZtcuZbt&O%DAn7_U~~S*HKg`-^#| zx|<1r(fs^;7h|9il@MTsQFpFd=yPGnH4G1j;wpkZJ=KsUs4K^wcQr9J&vArmN?UL_ zeyjiR-*DvfcQ|a6#yq2i3IspEoHH2@J+$Us<&>kLYD%*5S#~J056!eT<>iycSowcFjy;1k z3TIswrg{tCN%)>#m^PJ8X>ilfn%zSBCy>0wbCK&%NbPsX+&vo&nc+(mGr2cosyM`pxDeh(h zAmZ?VUJXlP8Hpn4692UGr_}%MYt2KA&aed$n-eUsdvE2$ix?^{#43s!D$c)4QU(BG zV4cP@Jn}Mov%ehmUc-vb9JlQckY3}N!6(jpCX^K^=bzrcTG$fg6mCjma_CbZVOH73 z=(7?|USmxWbq!N6F_xzO?zoSsKh8F^BiMjZcUt+^JtBeO33dFDO(x%E15KqB_ zd{XcXeqMQ{gs|DDee`(LJAIMwDD49xlsBFd+`~QvmVxUQ+=eq*?fbr%@{~d>O$1{mYqe=`r~ie&OoiOjL&k+X66W} zjMGU;)F*j&9b*tgI=y>PAn%6LrxClFwuSU&PBZ_Aj4vg?=k%{8tc9C|wH z{@vH;^_jo++lFmE-=&$tNO3vE2*C%OD7@l?;|t&s6wYxI;0)~)8Am%yW&$UR;Hm;V zjgSr9{0^(e?hMOg_J`4A6zZ z#J>qxUfP?%!uJaEbm=q#^<@m7VR^HD;pM=F8Ww2#@9i}X4S5x9;BOfAo~G?<$UO0O z?tNq9-}0*mIgbCTb*z5w|HQT4EBh9jr{F~{3?8fh;#Ki1MOan+Cq6Bo1;}wD))04@ z5;V)A*8<9AZ4fFne{i(*RF91TeCJr0V5wX=`Yf{oEJ@Y$m95MRszYH8+8n<2JPRlO zo<=i6rLd?lrS7{5w2BNq5QPgU#eQ<0fMxNFPEOhc&sF}!M_4V5;-=*7^V8G&le`>F zsv!|z;G|xHps9KE{>7cQ)0^&0_x_B#`wQoz?g=#>hEUR&QqBplEZF0u;0{-Dz8oGe zd|F&USLNq$iw=iwj%2L0Zw(9-ZCx#YiW`??vuFiF1kp2z5acOXp35sss@yKoRG25= zo}P=7mjo`Dg#%i8FZ(tQrbh-Xh#7l@6S{2J$EinTO0ckJ2!K~6~)TpL9msWJ9eUzzb!w5&fHzeP9@@NXCMr36sf0s1%B-Tg> zEzemRZu{|5e<3m?+t0qtMXlINbj+DtUO8?CPts)SFM((13QjL>P7RrbF5UAN>^5O< z42+GI*eZ5yw1X^0EA$h2tt|V^L_5qk&c(r$r^|OLj!)p8CTKD+1;h06rx;#(T>AW#MzpEy^on5b=JINDtiO~#=jL*|E>=Hgtx?F;%m3y7uaOo!}+WYOi0$zY3 z+dD6zvgpoo7718bJgy&>N;^huWR2HZknQ6JA30kBRm#oWv=5%7%QPTg(H0-%9X1G$ zv)WVXv++ru-sAH2!Qd&~$?6PPLPle0P5p84N@364thB?Tu6l*(M)U%G&ire0F8>H? zd@NjDS_mXG{I?KY!BcSoUILH5Taw;=FAEDN!Bbk5nJ3!bfOcj>5r!+KM}cVNBvfL@ z+^9$+r^hq=@ExsOj!pShkz#M)OcJW3F{{&p`6r@qSetNeFTwwmaJiV}7d9XYh zw+a(IX#!laHoU=UL9FM{z&`9ORlmA~XYr*2uKwb7Dqa)M_2516psfEI`^x~xxnCXe zsw+B=)!nTM05b-5WDJaF1k4t|yaVS9REFPpq4C1yM*m!?$PBS*0T_rbE<}xm7n#05 zMOAH^;{{Olbt+F`6F1MYgxD%wm6lg=q)|%y8IC@t`=B14dIld{@CllV2d)O-(-~cd z>l=$tn@XRPcPie~G&X=f|Hy3oL4ADA)0Kg2V}}6HRpljF{%2SR0drZw5da0okln+_ zIG}^+BtHe`)9DE<`z5eI_$bc1&`*8DX~4ayAa%IHQ+Y53cDOOPf0pvlLz&UXPYK?4 zTU5GRQ-Wxtf`xe|?};-Hv%J# zk_|arrMPXQ+ffL_XHVT0v6IR0*Sc`RGy(CJcnn@U`?VLE&olMM>0s9T%la?lUq`(^ z#=l!q|Mgb4EC9eAutTst7!2CVOezP>vNKmN_c%8E@`2Nx1IgG)FM%;{>F^Vr$iq=w zNV24scrjV}i`zH~% z-IL_1sl1yr0;?xCi!?0zBgP^QoM`F2{!p3ohu@8Ek{f-9~6d3ZwK z#ZkAG#=}GWTv(8Ya6L}mQ}JOrJWd|W(TdjqRJew0E1%NlP)Mb+(h3;+FTM7h?flas zJMk2D*22}s;L=|`xBN6bHz0`^-#TRRqVE@^$s@;$lzdx2dxa8 zM+-P{xqD&%sSehRprUw@#h0E$l5t)fT0pE06VH5hVf(JAxS3%9hYYCE+s9K{Uy(+~ z!3FcbkiPl7%I))2*!h*l`zM~F9psxAKLHErkv1Fe^V8GQ_Auf425b#+^4%mjY?&yB zquPO=)+j_P{>gyaewG`GTQHhd*%@uo;g`^M_}Q{q7(CAeVYx!w3An3IR|X!zdlM%i zgfQx!VOHV@vl1+BNxrid!Ek(5=`;5;#-)LWa#4iLd5S)qdGcOKhCWJ33@(C>XhP2; z@yx=eWtGJfi3AoDI)S-76!ztFprovd^Z5SharBfejLSYF)^`-SaMi9OlkGr9dfn+)fP^3{p=bn-gOUtsko~ZBlyUc*!@W= z*ngk|07BrGHw;^H1DY={IF1PN4oHsE_`F>T;kZ|fAuc|f)}bej*N1KFj6!t>Q)pXv z(EC$2vIi(V;(y4dsP>CT>2Wo4B4Fq;W${tDc?ae4c;Ry*jR$0(N(2nGZ@>;f%}iLi z3aSKtJVzW8rzyc`12^!r^gb?)(!~-?0Gz@+ENLcA@CoPeLwFwE1WfgrQ&$ss5Ed+i z%kN$-6&K=!+95wl6rb|C?7e~Bd=g~nTatKt}&6Zz%*6e8FA@P#y{V)FIGt2wM zYp_t#`%3_bC&imk$mV2Zr~O%t^QNU?Hn4BDfUFj9`g-@mzEdsJ0>Z?LFFp|;Rb^9t zu6!5+i+6H06L-$p4L@q=p%Yr_RWk7&*Knr9g*b*65)J*zi?9dTGaGj0(RWh3oZ*qT z8kC25xFP6IPT4G-M+oBiszvIk^u7y_-Eu?Il{8|Y$jkX z-&9#Va`+TpP)3g*J~ejbC@>iV2bZ}}m1WAYARrw>nBum1P7l7vb_p8qg=ysv>(sLL z`2~n3@Pe@65jMC5_@i+A@DO_@u*4JNrI1`Yj}ks*M9dQ!VS3?*E*n;yr>WO7hUdP) zkKaXqDD4PsN@^V6zsF*_8;5=jQd|%EtJi#Tq5b5k>)ngexTSf!sXyaIY;&lElgEAo zTh+Z00WjKjf(@efb6j%C#weR>_wVV`XP=7CgQeh8 z%H`AfJnWfMe+eE4XeIsY*P{*_gtTSd{V`z8n`6r?lSJsJl#6zsKEnI30F8t-8l>@%_7xPQ|_PxJb_@g4dF84+R zK%_+m87-iVL~6~~OZ_v~yO(}+to38@zR52YiPcOJ0J>6K#to}&6_bi6Jor)W{G`XQ zm4G?LnW$ybtp;;aQ{*R{r1;b-QfaNk6Uov52>2Ff5xy`Agnk7buHjAjqa@0gr*;Gv z-={tQp@ENjl=1K4wWxDs!M58b^{1qkULNm)_n3(DIN<xk-!!70 zwomLS63$DKgEoPu9=}!Pm~pnw`wc-nk+*c{JW=@_n%(s9V;WcBwO_| z1I{tO@xo7HiuRrO!x*=)eK!{Gd!j;z<)kzg@yyhQXsK`Vk*Am0#oR1C@xBZbv~D4- zrO6Ud*t;ol^!}wS+oK}m|76pTk_eq%q5Bf*_2QCEyIJ?@$$1f#0Jg&)}T} z%X0}lQwIqRKA&zAUO2_28r(~W&`JcAaA;|zU*<4Tjy1DGF_cF_(`A?qCpgM8<9xmu za2#~_9w+aaq|3aIhfghwN6-_bM9Al562N@J*68R)k2b%Dm6E&J)4?Jy2}Ft^P2~Es zk8yq74HE!_S@l;ah?oBT{+0dWE%BIoe*Lig8xM*X?NZXTc&@Vi(Ryf)8_ugAGN4)@>Mhb71$zg zJOl5DhyK$GjUTi+y&K{!@ff^jJSWTl8y)-mVj_>;xNA0>qm5-*e4;XHNg07v;(fT6 zuvF#Pup6J;Q{R5ue0c{$K!*5e1C0B7XaaM0zMmJCibJgs8O?8C)5r?vsGWq;OboZb z3=w$dx+KEaum>pY{2nxw00>iYrbakwZy??mHEcXmk3_2Co0m2PBajLQq_glOoOlA{DPCqvMpxkJFU6$F6J z`)_brN24|vtX#N$T_^s$uBpGUbU%v*AUb`{9BvOQ6?P<*r2)t?+2*EGRFXpDuMRCe zveF$i5cakRz@`PyAB~on72vvoaRXrdU;6N;IAn4i6s65jsd>y2mOSzM51<4-QRo+9 zUf2=vQMpf*BP@$clRSLhE{g>2Jwdz&WuI!KEQv1N%ZG?E1oFF-m z;QG$m@KczJD!{sOz0@6W`1M;@ENJdt`lttV?uE;_Tz_$2VSkDoi5( z%cc**!pU_(zPUI-ywdx;^wiEsss6KTQH|e^$}9`HL&2j~Fj!oUIvo7LX^gR&ogg?w zUr_`TC!7hVa=3b!h;x7>oiDQr;eO+ijgb{6r-%2$=mP{=hjRi1_sQ*vwx?Tk$`7$T zxb4y!f%uP_h<-6G_f(q^s{Jy413ChV&pM-(1rpBU8to8I_2lco!G+_;D<0oJ4JE)A zJnN+JT<%Ae&wm8#|5n}~Ln$uq6i-Aq82d8^Y~NUQpex!BoNWF0$>XhK^K&KU{R>k4 zZI~@y6VJhWVwSwzMEaJT*C}rac?!~S%a$z?LnWk>ZY3=70-SmfVWTLNU%J@2{MkF| z_phHRuGjEK*NP7?_zk$OTSI}^@eVZp!X_%_>UoZxzJi3T#|=J}X;8@?o_hV9c#oG= z2R%G|nkpOua{Rej2$+dT1yg}BQO3yyR`r$c`#@BD;KMc)u%1E~)|;}zjvINKk3VCp z?ZycMpOKzIKNswPxp9uJ#pzE5NkL!V-mh>5%{oLK8u}rOelwxb4`lx9BFw?F3tS?C z_G)Vely8QJKv|bUA&?3?J%Q-YeCgX}`k8 z+oIZk{i`rK5fV+fIxYjnfqa-q~jWnPi$k0G$Z zH0ug${#Q7(_jN7%&AfpHe^w2^h@3fdro#oKnv&4egbf9dSWPwxbuTTCF0*s#JIn+P zcyGNivw|{syu={~2iyulD#I$I#JTss!Wnop8hR092KNEiR6sbAtke*zrSQM94t7o?_~Ec0v;2# zns_eA{SABH6ahf)!_AvFx0n{R@d=uMrYc(fk%T~H__gO(4n23SvkyV2YNUmb0_k`C znIA;0OQ&cgtOisB>hNgGj;QpBhdA$8whi}jgSvN#(=V*}04E(8gc3YQH;5X0SBo2C z#XS<5y&5n2rn66=v%3ywf}C#GubG^*hgrLE2L) z?JP?-8&>*hu&{hSpQ+EFETX6P)H9?V`b9_d4dxMf8p8)+!}D+jbeJ0(ERL^XmldYfpcVaLk5E&8ROrbf){%*A6Wm67PtI#7p`y_SdvuTf7GG@C#XP zZ{*LLF$A!DuU)$~oSB)?@g!vmYr_By1sL*|*zZ$ZxZb(+&>i*n&s9rnxL63oXR$D7 zb21PYis(imyXRb$s-Xbu;0ueFqv6H#7?KzYs0UP|(y9V{u@Eqb+5ywm(_s~9KjUbpnx7OketG~ens%}al*}Wo}SM)#7W{pAbzQ~Nc$lM>N+Qz{Rf75W&!I$gSEJAK`@HOJ__I(276pp}E42 z+W+;j>tDX!EMBkGODv8ttN#kB{|fv>I9j3icZRZ{3~$i;rU?M$&$QrB(}K+S71^m| zLO=_gW~znC`5T?qOu5*7|MuDk=@5$cy_xRlUB3wPm!p|o_p%NECQ!v;3@L2EQhf3V zbKtzIjD^Wp#Oo?N{;u)g1Za35_>Ta($CuZflBi{==UL5p(z!S;Z7vA`GZA4>5})Ip zOFMR9_(Uz#nut_9#iQqJeCH=j3$geock@q>g)gUQ*t;n%1QM1L$nwdF3-dSR;7<}K zPZEd`GC>21JY)OOaw96OTOU>LznxQ!&;$}(5a{X(bMZQ4Qeeh=om-chJ@Z$(TeQPaox0!&&=YJeE zPredYhJaEV=Ql>>U;cGu0hNeWkYZLHr`sE!QJ#|2NLYkvZu^G*R9DV<)VOH1vXfS{>K@M=o%uB}n&0fYmWh{P=sVxpHR zi}XHO#w|+G{s$Wf)#CJYNt1Ywmwj3q;Y-WV?yy8~;N%e2qv|qK_5^s?e zgx);&rfL8x){PrChV^<~+krJJpdo?skbEz7Srq)j#rFA!_RQS7j#&Zfh*^Om2Lp9E zNc3DZv-7^FRA+0XYSYaMsI3gq1c-=hUVPxchWzH_NdgWQf^yLA_;)@j}Ati*G{rv2IG(#lP{jnD9R zXxh8CbS1j@{l8?t|DtKWluW9B@$BN@)W3e@+Fv&MrKMV#d4H__uulW#H`O10S~-9I zyvF|SWpeU;1E4ou0H}Zuv|7W?#*M{7r&Aj877_-qH1{JGD%X|=oo1)M_|e_<50y*0 zb(j|_amF~uh!3cg+1oh=%c%%bjdgHHv~)EZT)-YsWtE`BuXn*m3A{cwekKv}B!M)J zLem;Ti0Rd8|M9~{reXy}3zMbur3@VSS^oHExnKT{c2H8^C)?|0}W%pjfRIt1n+@UEMujE#JMV zd|%AZ)C1E+-76S`sHoYU_dr3KPF!)t+jd707So|^hOvrES3>f!tdhc0hqcw-lRs`>+hRECUy-ItF?&7VB$cK*dwQ-AYl3t<{u z5&qp$gjP!v#05o+nZOfKhM7z=L9<0Hcj7exn$1wp@16Xt9F)dmwg8S6OVf9V3C+Y~ z*#@B)F$GY-0aEZRO&8X~*O7|oe?fHOouKF5iOW$(*V)p|MXvRK#khYhTB{j9A+2%$ z{_jSMFFYwGfWF2IG6w18Kamfn8M#9RI3(a#M-&NbbZEfi`PDjQbz&a<4W1Wi& zQDyz+sJ>;FNlfeU=|PH|Avik8oOp|RaAT*`%LE@K@TO4W_CRdXgQuh8#y2%J$cp2) z8j2^Ghr|07F#c6O`Wd#zW_JC#bh-k%^~iy!dy4VD8cHrlcx0bh=9!nbP;Lfy?Koxx zkbO8q-h$I;W%4O#7_iugs(W@u<=u>h{TYXb2N4*gxOH7Lcj~c@DuJ*nH1`&bRC$nb?PC#nEu0@a5Mz#O`A2YqX(d-;L=%ZAv zbFbes-0b_eR4v9)=#$kDc~N}nLif4<@q5?4US*1pDYIodKx2NV`mewg%NH(Oc+*vX z|1NKt03d^rW(77?DmMOiLjf+bV(3GE&q~PQtCu=w*)Vk9+In%G&H(*@4MU9mI~Pwz z_3d{?rL`MlAt2RpEvMveMUV4ahS@* z<)R3f6Aw+D?_Zi<7nL6R0;1oQ-{Y#(Z2Q%*Un_sdY05T#9`uNLd8J_X*5g9@IDzHY z)1&yXu)W{o36^!9)>OCZ`5JsJyigAoN_180QOuWIW+20vnw8RK;>(*ltGc z%cq$dlu?j5WL*!ghQkR$1+L1bv~yifPfKi7IVgivIPtdpN)ps z78w?J;RqQ|V-$eggEdU}d5Mn4$5cA71B#=Fzpl@E6J>Y!n%7&TB;Qp-@Zo!bF zS+FjkzrrfG#VgV5Zq}2V%8vlRh*H>k8(|vHDW;c-Fv&yw&8>;bpZ#?fH@PujR)7$0eSd${JAWA_5YCixW%D&O<&}D=7%K;45!t*$ znz?DnBp05aZ9-0EQ?JJ`ptAF}sIq7Kco^X6N%*n+yTEhs%yGL;I}v^!Cn1>i#C4P> z&vMHgcHx?`#a_zT^>fY-}_ut{!Ny2Ym<+Xa0=Ft;oij`{AJWSi)Q1N`nu8= z{`RHT*S~UT>8Z7h`!(OMaX&w;^5sCkra2_P93vz?({KM zoMC9mbHR7h7fA&}{HYNklKgQ)%R-azYIJPj54}GJpA`2p%i&M^^@;Uj7(s_uZbXg0 z=gvfhmBz9Z;SBLi(8wgP#N(+?Bu_=;pl7p-@dL!bJEoQAb9E*SfaRbiwt&|@gcgup z_@oRa1h%bF9AGvl3$}-Z)9hr;O;uMpxM3_fI|> zPxp0PXRU9CS?ltTzQMhI&#}@kFfuD;2(2G3SZV$O!u*fy0$N-xfG);g4aM@9z_~gm%!bf&gZri%1v|aT| z^_mdSP(al%vy+A+#&EyF&O2bFb~HS*5bqpRwWzxMhm>Ex#3{l@CP3#|EiORGCd-Di zjY{!qD2(SzbF!TX+n#VvmF4 zf=<8ygfJzv#N#BsXlV#YCS_=(Z0{}qif#Y?xFwT`-@*;S8RiWa~j$C{#nNTyB8N%&Ql}leBYYT&r1N<)Zn%~dxq?0DiwRZ z0tOG$1jGt#9w;^1!@&y|J10NBv$mJ5!y6<7h(a`!xEt*_8WqchcicrKt19C!Rorz4 zD%Wx}I)4fxI!S1X3qEwx)L3wdvk#w6HWA8_@V);BIs9}lqa20;6Lg@9Mie!^ zw=e2p36H`%|FZPL45!5zd`hIiarN0NnLie{A?2}u3K>I~7MH-~(T@yS8a!NTM%8Uw zqspB-5#F@#Y<;2<7PqaB1}~mvI&B$2Nb~e%9hWF3IT7}GjU%$;CmEhJw?f~Ov@Dc{ z#(4?m|LspkmEZeRyu?>+k|>SyuOEEWHu*>p$Pr`Af96Ji;eYzUwLibsC|sS9(GLrM zveXx&U%6gyXxxAJ8XE|HPVVO>0Q5ex2XMb2WA|dA)bC3ONDI)+0N31)%9oc0ol`e@ zXP6#*V6Ix6rDJ3#q#T>5&K>3S;2CBI?m)Yu@mPhksbKeAQL)2uV&_lO$ml`L<$P6r zJe+&Pf$(nW)wf}cM9aa80%r8L} z=U|6>EOMUz)qUULb**VDhTU;d@p@x$<&S^7_@_rM56;Zji=APyv_$jw$9pYDwVI~< zR!*Nj{ibd7@vpMl^XDo6RFFoaG0^$|3>`KWkSzc(i-ZaYfnsIhYHw+=JG}Ja?bQbv z2G+E5P$EDIfmTqJIX$Pg?RM5tQ1Mcosp!J)y-}gpjE3h<+Hk-mhWjX~mv@apJSP`Z zjs1r18;431`W?y`2L$2B3D5ftAQ%APTGtSD%^r^R`=y);F|7NAv*_4nVy6fbRn zp^#MOF$w%K3~gs!05bxk>)sYX**z`8c7HrfujXIR!B8&^q~_((lB5YhiF|@2cI-*; z0LkFT%Ei&uA!GiBqRK!01kBI&b=R1*#((kfKIZzr1v2fDZ%@;;>Aq%XwDQFR%U^op zME4a=%IfwDG4mq;Y?q%7_#n{=H~VN0ynhqCZ@v4u3jkh8>jSbzK@A5m0>?t&rSsjZ ze7?m8wpAa{a$yNwDioXn7S$tBd2U@)+p>oS#KH@G02)z2n!unF4bLvbvjbv2iwi0- zQ?jzh*Mj!>Pdq85?f^Z$0u<)V+8;R{wn)@Oh{q z${(al8m`YU73YCGl{U{!gA3QMK{E<=E0qH4`Zx-}ieW-P9RS;gE6<#5o`?CD-?z2; zKF&tx#9@Sh>;^0fG9e&Mz=VJs4nVZ9YcGO&fDkxAfbkboG2;di)NAtbb9x7lmf(0m z&NIPDTHP2)0;ogp|3QvCr}v*2`zx&kl&t?(vHmmtC-X*Z{Rb|R3H>qIG)xE?q)gCK z8Z0kjGI^5I6!e6ie`SxScbVoq4os~}Lv-(b?SnGv^06l*0LTb|A~OQRm$WWm2?MG7 zj*^z1md`62PQeu!BjhDD)NJ}}7_eoC)3{mZZHkFJRM zG4|?Q3o$>?OR)Cx^HapUy;Qh#&67VvM)wIt@GD1!k@eQMF{{i z3Tly1w7gtkWwnd4NL(bcR4I1W^B*XI_iSoS|Ra zayt!4LO>}|y*Oc~$ZfTwGsiF$@HP1$G&@D6UGkyjNdjpcg(ezk1|=`4(xC2_)~#ji z{{@(w-d_xor6u)W)_=~?Zy$VVa_&FrjdC)vxE#2ZIa5X-wET0@9s-^)NBa;`S?+L2Ag*5uzs(^%mB-U^=<6?2#63U z??2f(!`9*6J)0``>!1iXzasZ6i{FguO*8FGZ{S!EYdSS-~b_!l(Cnz%`W)O6dmW}iKcU3kMWfBg+EZm0`?SD$|owPTa z;^;~%DsGB5_7v~q*fy>3lcNr`IBoIy$D=EZ`L*}otNrTv8T$|a{?+C;zqoJtQO@&c zYyX(}rTS}`Z)Ij?r8Ymma{TylB+M_){XzwRUYqj+`s>%PA0Z)&%nWFTKw$es>LA%0 zU3&6F>(r*1;$ZKl%Du>lL=#YpX`MNO+Es~W*gFt^Oj2nav6)+FwzB!;!bvu1FuY1; z2t+>Pl$&c$G7QGfwGy>Tfjr~5*vW^(SNXf#mcEs{@U-J^qV>6yqN}Mf3|+GR4>b?2 zhBx6vm!Bh_8=U|%NIq!gcS!Ol&Iddq5rNmecm|dvjy)-Sfdp{Ci8!LD9~%ZBlxr9R zZHadtzL-io1=r3*{R78gIEba_Wy8uFm%@obX&CR!|H;9hs|%gX!O&!Qh5ZX0XIA|~ z4yD;aXVTX4UjFMFp_%9y@2mSBjOfDe@bedXtgzmF z1&hB{{4Jk4b?WD8@prY6di=r#fJ(#8!2#QcStM-JgEmd*OBoA+sPy=W_6bd&+_SlI zFE#-kH^x9w8p9}RV;CHAsL0H1cbO!%u0)!^`b|-3&z(q_OIUANUTZ=?AJ~0t-&hoM z{>g^nO5$-X=+gT{UV6AN=blI9PyLE%B6hk_p74N#w*K}GAB$Q~zr;`==>1c9<>l{S z{^9YhSOijGkCb^Djz=Le?jX<3LI70mpFG3X-%B~;e@D}&v$2ZHR}T*tn*3on z$yAZJDaDQ9ip)XC0U4f$`}};~J|Bg>Ur!0!ET_q^#&lqXnSj!cEtqiJg(#qUa`BTP z8n`+}eE9Tn;`p90oG(IxoXSsmx}V^oOA^LbA)(0`BV)23YP?^VjjDg}c^3J6$W(hx z{b^%Q5shWQx4q1GfAK~3^t(kqn(C9apN;(8Z@$$0+P`~h1+~A5S*x^yVJl&NHuzZ2 zFKyth+}<0%(XIa-bJ?w@dCM@hMt}H~YNr=JiKMw*1~)S%Jz7W>D~!k_fW zeDt&f&wqU+0>-JzU_ab^XeR?tl)Zw|FhO{KK!X zw*Pszw%=moslLIe^EWRvzVfF}H!=8Cdng0TbY!ObYs~MM-{$%+UApv^?d|uk_j;ah zD*>R|W{m(>p2Z7=5CVwTtPm)cm>oFN8;!2rx3zk2yP=#Aq zD(g1Ky|8*AjVW~%IVbVz$ng=|GufXMxCNTS+M^1IrOvjljrE=P;C=V^O?A3DqRpaO&u4C#Z5^#1#D&YOyqI& zp57m1ZQfgk3(+C_G(2UrE%Zj56m*~2LbBwu;o@x@qQRk)>@0(S{K-K^FDRs^pG}+x zM+n7-c+eTNi=5y0(Wv?_KF4X)+*ROr^r_@9fBV9T=<=g~6}8W?B%S^J(rVPAw8F31 z9j*M;^DAHe%V$^i$>0a`uVk2ic~q@xj=#Y*-dgB`O7Zq_Z#My;nlT{|Xad?wY;Y=F z3+F~N45FSp+dX%s(LZzlmdf5Wwc;9VXo_MhF^tu?5j9W0!uEi%U_Ro7Q#N-Sq24(pNZ=DAnCdEMJQRrIGk>jN@kfRsY!JmY^{D(SzsnmQd^O0-s(YQ4hps|TY?kNu79>z6Q)fe`A({MR_c|BL&V{_NW? zb)L0(etLe=H8k!IdwvOpw=bOA;@}Wgl%C=Ab5<`u9Y{@SlJx&t-RdP>)M&0`1fvA6l zg)S8tw_HSCI?1Y{WWHUUk)$oQ`~%zq>H4wO$_ z>n$HV-+q9a>xRH(%+{~vIJq0HP*GnWXlJZWZHnafOBjkYMs3{St{5=spiGZnPqbVYc?WCY& zNE6}(e$^Y(rkau)96S-*cf8#sKuf%SI3s{DK4omcXX5bF~8LQsWqYE{UY7lRRi#KGQu#}_fv#ii_Cbrq{`IyVEsj5$WrkV_M!IU zCps_hTwkp1oG;z31w)GGTg3;9Tw|=wZo=~Hd{o`Qi8S`HAtSXDX4KgNy1uC}#0o6? z0B6{ZG*e)Lz!k-{acKIoStHgdMJ3L(FMaN}x$ACSECAF}ra7{e!0ElV5Ve{9n_T=8 zCiLwlLoW#`-USj^nBMtQaX}#PPNcH9)ey2Ngv&3RBpVKrSv6s7(;*=R47AB~V1Sc& zg{*18&5Y3*a@kP8YXKf9o0kNHVB|4^@r&EGMAhH@bX5IkpR^;$MmoSF?of=;bu#tJ z@fT6~zsh)@p@vTJ!7*55X)gt!O&vJZdFTQIkl>B4)W;%yiSM_mksSLhj- zI@Fal5(G3lwIyXN(PAx&K(UA6?=w;(?>9R@j3lB~boa-nRFEMGJz0l?KRQRw(Bs%S zafX*l;vtj33~fVne|)| z;hLKcBmuP)*R}awy^9CIDc-p)8eQaG!DAO#C## z{U1MB`a9agO1)BU4T>dA^VybO_58>OTj8fgK5m|0&E;+F-Vp*oHOOM2KDVL{i;YIa zBrBr1=I=1Ds7hOd5naN<0S}+oZDPzuP`)VD5vGT%1s78Q`zyh7dhtZ!%^`g51C4u z+h|ol`{x^U+&Ej0Kf~c4H<;UGwVMjycmnjaQ_nXoaw3fbOu*A5$05BCE>xFei2G|V zoS*&FJQTq%FFp$sqjJo9nVz|_cNcYxAh!2S6(Su_UD2}_@7W#=k8**mmQYI*5N+%# z*4wYp4fiJQkf5 zF0TyE{mIkIU;5??OL?bq_&x5Em*S4wYH30@_nhG3M*g$}B@bYsPy07isP}#I)uDBhzc+3q6&?4yFHA^7QuWsZf zVy6wL4VfCM4Jzw4M1?)99Y8B6ZQ5jOhYCY1{k;}v`?n!T!+r1rQR!2^N+P9n%pw{_ zNS=&yjd#>&MXkpUvL1mUh#FjomI}BCgXKizfa1(^BgVNT(TOLH%LK;>@Fj7pz2|Ci zDQYf1W&#kbC8m9A@4uTWq~0x`B(upx5)hg~WIaIXeLFc9l2w9d5CUCbXnMu%EW!Th zJyGR%Kgl7TAB>878S+WcNVv$EfQfs3<-PdA6Va6?zQxsaXcKl=t7-bSn@Ig?z(=xc@Qy^Q_{CJ=pCg2_?kS=XKlCJ zebx%-$goj)fTCa0^@G;zw6A7>U7!eG4xe1;9%V>y3cJ9Lb+v*nB#n7n>p%JMJ!S}+ z*amb#X>~o?Ky?;%J|2r&!%>sK_-LAe)(db!Nwj4L8Ui=J$cU);q{aFYx~HN-rxK#_ z_g+2`wGJJ#d2Ndp4H~GS^GDCzUlON5MFz*Ezh$`6PfO$De15|7ehNA<)JftpW%6{g zWevjCJG1achlLi`%~{YR+&fYLxN071)!^E-Ylm2GIg7!JgIb!c7Nb6yE0>ES)PNFd z+~otO+b=OgP~Wzuw3~xQ*j6l4p0f=w=i6qwuzhhMDsk?h>;qa_Y(_#FkQ4?J24Xug zy?&Zbv>r+=?ADzOfZZ35VgNjgFz`Lzn1%|Ugc46cKM&@kr^Z2bTAYW68OtArJ$?VQ zG(MpR^2`CnKqB(u1e1Es)!DUsnTffLm795oh59UvMnFjQug|SC`f2ELjQ#3_tn$8@xG?@lG}Q9 zfG1=BWjD=7=I>1RP8I;FahoRGvSrJl)M$+Q7zX($Y6be~^K;Z-VZeo?rIpU8{m7Bl z%M1f9?OIp5jn#u|t)24+!w)kBXag(P(FR^(Iq{{ayk>n=Ub_J@YGh(|`_G@Cff4(9 zomRkgIRCGAn#C+O=2QVhMSslW{w6_1W}GWS25P~WL?*@o_0UVpc|0GEq3*8(nt)41 z5LhjaXiqnrOcB}qMM`dN54*A6%T`v2ay^4;F3xHL0U<~IAH?&?dd{2K4m zZ!~mtw~T%608dvTadF;hf8Xf>!0KDZ!F#*i{`Gp@t{`Mcz_Kx$DvSjILjq3>ouR*-ucKVeZ*<3iqvPG(i)5 z9p7AyvKY0Wdo}8x!*FFQ0F@lNMlhzTTwG2u&$!Gc@^lT}kbPt-p(~o=Oy9@j@my5$ zNWoKqo2OCjSrYzCHPY`}@BWwJ)85=Mf0;Vlw;Qd!Y#uf+xGy$g#6c<~g z<`0jyUvBhJ|IWWQPBBrG8D;3B>O;_i%N@i#;6hm{H(#L(Y>x8 z$k-jaubhZ_XIO%4X8=e>1yy7WTODzMbF`q4F~XSY}PX&hLB2 zs{Gly{0Acd+>2@Xa8E-5?jsv&s?ZGy^ue4qQ0Q}Eaa4g34`1kB*ng_?;`(}_w|PzJ zHqIL0w5FJ;X&<(VP(~viLfU2}p-v$#ujP=D+MFT9$B@Arz9-JsZcbP>fKjU*bq^h} z1}h_$Ns$m&JmQ%Pzp;!Dhj`v^2nuA761YbUp3~wy+(;2fg@g2=*KqX5BfH2B9P*$L6 zYEM}f8r@OjiIbi0v#95<51nUvk1f3AYN^3`KkM~1))({3%8$fYsWHVTmH(ZxxMy6? zH}|P-{-L@u3x{T4&beZ@JA*Z6hN(i9ejmAiib1NAT5 zzoq(7W|zv^ET)Q)9ME&5?Y*?3>c*YXntMMM&Fy)R>%O?lPR2k@AL4FV5J0E>__I;- zN6(<9(nz&?P(7h!l*E)=>dVBf-9RaLjGFvS)awM2p%cK(3tiFk%#`(K(G^}be<65c z^5e4j3TrVH7Pk@SA(Uq4qPgGvOjQ5W2d#cB&CUK$e{wd)*Gvuv!88_LWar+~QTOUO z#lZM7{E1|YtTkPXH2N=J?mqL?7uw%{{%mi7j-b!ZQkL@;ntZz!jBh`fzgZa!TEl9! zMRIN9)gJzLq?O+)VU<7G&$9~ZJ2I-cYuBzC3x{S~mC7t1c!t@68OCwRk4*y-2s4cy z+rtKfncsO|{R98#-kIOnxvq4#dW@-pfIS6scYZLMz2iYv6mFq%=wh^_nCDFe0Ww9~ zfd}U^R&6VKCS&E7v(b{uaro}|Ak;k<@W~$_aC7u`~`75|jYkn7#i|^>>#pS^~ zbLYkd`54)8nJq?@DOpMnKWcYS!HZGteRoH*Fn@W+R$CC{C`^CYdx^QJBWP&~w{hZy zX!+Rlb`C@y2!J}Hg_%(w zLD23M=VyxR|LFtOkN?u`wa;x?Q{I&;2-s$<&ZWXk!R+l1M00n2h>b>EU2fBd2m&;N zSa+CG#iW%G5VQ7g{<)*;F*v*Sh=a-aS$MlkbnJ@4JioVi=IO1lZ?I zT63o6vx^csU5vCVM-SPwUT^7|4FOCjfXFwo1fKCPb7sU(7CJxrPcL?Vy3`piGPO70 zfYJ7FXuW(>AJYQFUp?_5mN2G~?E!`Gfg&8tfr zK-!xikPzTE!wn=et-cKliW}w%oB#QPvmgKT?#eH-)%Z3sbfOW6y$Rc*A%*~@`kJWD zp`>#NgZlQnZ0Dg2hPJwpHfa?dON4O^s;!EQ1Ocvp;R<&I9F4lKos9adaUZbCO%v2i zUob>qqS}a%#+tZ)lF;BrBL0&N2T>EaK5m*2P`syS`3jJD#&L!RqJKxd8_cR}!C6}q zmDaCiy+4fqu?J#fAHBF%0ZKSzHKv${NssW*rLcMq*vzG^-I~kSevSd-eQ(uQab(|9 z5ybfNU1<)^?K|1~$=6?M9=zTdT|wO+vP!%|kKZD{wt9atztnx0AAvBmUO$?jZ~a5> z^;J*a`A_S^?}ld?BOyJ0akks-+7lsArvd0UL*uIzdD7-)TJ1h3Jq$}*)|R&X-h;JI zetcK;p^dYp?P}xFWYzBQ(&YH7F|BU?rT4C`-x|&CzK`GgIGSv`8K@Flfwfcc`JcGB z?b@`Urm#lsb~HGTFgS85>K;224K8sA#tLWRvBc4A1!4+Wv&h$&$7rcEqUfJ^Jv_2hH&rq%x>&QTCKiQPmj*69=S9>7gcZH5moNH!)^pFZe$fDX*}awy(M|L zauaU{ZX)o89K@j`-n5Ie$>Au;_%l`J^hbpz%rD0Gy?$H0KAk|jR;#u6_Dv4%P_M6X+`Gp4Px-ESVfUhiyBTp` zS-;+f1zbu}cf$e`1QG%g2G|GcqheHN)iE}qVQKri!j|8;clIM6+gbh;YY6tRQ>@6T zh1L$OB8?kqm+JXgJXB)ZP+N~@*>522pfbPNRA31MX$~erRG>KVILw&CR9X`T+;_;` z0n!foXD&wlvzMa56*jXQj6ifK-?jEGKjw9ab6IvRlq0BHrL5u^n{aqY}#!*AU^^WZ~!s-MPKcrRxU=yYP19a;lID^QCj zA7d06K7K7Gs%_rI=A(OTBm=oCyQXCWOv6MHwK(92yFUJger0jb=2szHFxo z_0bLn*KXKtJA)PM2MilVtcAC6b<8G?YFs!c5nw35CM0~c&rsR0OxA(TqbMho3QUpc z>a_yQUR=K>DsR~kl{RnS2A%a$X~Vo-h8o#je&i>OK!QT$@Jw%XV_{`IJ!KenJIsb$ zgXvG$x(jXB9%u_T>9oTy?(OyVvA8o?M*%x5;yHU`@Y<87x=(%gXzTEDt8g909|nwX zOb_#Wb-yF){-9E6qy4q#-(~8)|D@qF`OYEmUFa`u+qSJc{TdPXh{ zWVuczs%_n4zv_l<9AL`sLV7u~8`xe0b?qTjik5!rR#EeVOUOrKMmq8MHXpfz3D_R_L|akFV{xVtT#5 z9|9N+-`kUkvQlwZFy zcVyk?*y;Agix;KtXQZy>_^$ese4=;NTTg#kvk#P7t(k7MT62a%2>=NK772~aPx4y1 zII4F$qe>e=pzyt0OFKS)XYKtT*k1ndwz<;n6{i(AUQm|`YsJDq!vjAA(8)8>25MV& znubtakNP~XRfjN|jwPcPw8KorVA_*lGJ!w#BxjK{%JI_}OaelT28dKK*XW&-6CO++5g;yNSvR~XKI3$FH;O@cQ2@+fbi@PrnEQ=E) z1cD`aa9LO!f_rd+XK@Jb798H@yZ7Dq-rw*t=k#<>RdrSOoHIT1o9?QfqvPH+bHY`Z zc$a&*AFu93(C%%YgY~FR-B&q--TD9nMhHgu#Bzb#N2-qnjZBL^lrERe&L8!;w@Hlf zZ?&D)Zu>BpfVB{l!)y)nU{vYMh#m`A@O=jGBR9+pO}ay&hczTeF48DN8t1BDe#l?4 zwd{AUs9@4zdL?PYcrM(e_5{BiCD4*>??>;-ZnA*0lH+XCnKc=OE+J~2+WZfaar_x4 zIY%iVko^^Naaba|3Y!f{dtQadw4p6Gb>S&P>Ma$o6fegRgB49O~c+x$(VXN744; zj{`0j$^z|Mg;P?i(x{#CsM2+lCD*w~amsLjtt6vSFsd|ZCh5h4z8b7FQx9cx z^0V^^Jc@K-lZ5#@UoTyMw)^xUjmYx-yWVdyweeDWal*`Gm_f}|Db*y6IuP-MQyZw|gvN}Eo)t^o(G`N;6iAMo8v${rbMUb@;k67)q{xSd&L!sBoEdQRC zqu0f`$79{r*ac!e+N;~S-rgrnFcSY{mG_@=hy|AUg7jJ2Zo!mo;GU~Gmxf8`w8(sg z$xtAkETB0b1Jjun>Eka&~rQDZB982x7vzd1rCidF>{VrH@8O zy+mX|JeQEAfUpD?dWE9P!;yscmSDI_^lAXu{85y!rgx z;(=4|9>1?u9Xh%5Cq7bXo8Iwf`pxUCbS;#MOttrc1R2m^-o7rQg6TwHu?1H71tBUX z5*DBW!UvTKy3Jitq0q_XW_C#Bt>{C}yP$#V!B2vnr&}9bnGY7l^cTd9St=61#wH+H zw3EPL8nFy9LX@**gx87DS3>Lo?v9H&s_vK{&d`>=8H*q&C;d{Ic5BtecQ;yf1!?0V z;C$HjXTK2Ec*3YiCb8ZH2@OkIm9GI);4+=ln3RVzCU2gvgXLd8x6rEBFpMnOZK!zq z-t^QxRCSX#_h+>W3Hd{LjOa7dBtmu~i?1yFI1=?-D;*oA=5L>y4KF8y;@{BZ1vPYI zz0Uj-SWD!{R3P<;^%hV3d}PV9vK?K;XTe?3+TFdXk3yRdU7#?P)een{>dLGa3)!Es z3*xA5pbzv%0!y-kWYgxGo4#FlI&V-nRB|2ulrUSUvoG|0iVUKDYS0LVDt%{;{}&=SI5@ip38Y6&v)U*FOo8I>m%7y)q!zPn@JoxcbnVg3 zm2~~+@$l#|d+sK1U&$g~q)#DDN3Xm?i$iXV9U3qKFrKm|{h+Y%sbH)0ck_HZpP8;A z+5lx)sIPhhuP)S^Gbkh3WW#;hWBt(mxqc;j{Yu2jl?g5J)QC6R`;~R9;P1Fwcda7% z&=)z8?qV7R+J;upqjLq-p+&?eh4h`%ZkMwK~-}4_3h+I2EuwFB*)wak;Qp8tiWDYdWwb zJ6eJ?iQU+qGnk}JilS3DainhtW5y7aV-}S**O;g|Fto7c8#6>f&>omz=C#+oO(f2pT=UY3lt^FsXV!g!58i zmJ=GAf|&R^!*(BgR(6rcicw=urO8#<-QKfr;kSA|-QCR1=VMuDn>H=q;cZwxZF!=8 z*}C+`>|n%w)hEc4xlK_XYy_{eRIFQa(1jzON0cxrN<;H5fHaU6xS2|L90CdchJ|L2 zNrbsizG;H&PROL|rN&(Bp{5N$^Xs(;45|>Ssn9Dw%HS%W=N;O;RRMXc)p3g&vyF}< z2?LvZOnWg2uLvlSO!4KCN-HvmgbkA3Ff1%8G~r6XFksSP z)jLDMb*g3I8GELw#V4@s+#3g6>6}&d>4DNvpv0c`8jZ>nzd{;GkvdGy1(q|&2#BZ@ynW-4u9koTWII>WLeNq zhO%abAl3BHy+q_dH4UkMFflq2sv#(cEuJ2CpG6W$0Y{w~5IGcWhtrD`k{fA09?~}V znb8S3ihEdmCDQ&0s0$p%jLFcvA0__^#vF~DO3${487j%5$X-Z!K8!9jp2-lR@({Hu zXV9M3xo&l$AWuQ9%$u)ILzj#jxs-{+zve9c;fI=#Q2Xyy+s|!BX>I-Ph#$?m1~uA8 zmg9UQQu4npv;1)!R>YBx$#ix}5=-~is3{1Vj&*GIu+#Bb;Z-4inw#4eWKg_(yd-*( z44aj3NEQ|THVYyW1Tii)A5@U22wU+Q5&uBwAc&i4`@18IqU!9`ukcG|(!)pBqkZsv zL@qb0s!FEP_laKB2>d`4$ru_@*YO`Q!8xiBKrln;mPvy2Yx+e83^XjvyHCu~6PG8a zyNS4C6Iw<(hc#~;0P$Wv8V#uHRC`xGlVzleR#*?C@+NK=SQKNC<^<#O-B0U%jtqK8 z1s=kXtt`|JDXn)YIUbUFZ#}qNUN5#gAxWm}axNnyX}QdckJs=~tKI93t)br2)0S&V zM`i$@aEl6K(n@hXu_AKAu;OvNgSI3p`sF8!eV3U=EIi$ejB6(pE{`OWu;}=L^8}lB zPQSSTAaRW>4p2`M(CaQ_fxJ28oqNH7A_022dKIMb>E$&}*p6?hLg9Q-(N0u;N1Zg| z)wF3N+MQBqa}W-y!OzojQ63Yi?!`F5uCXK|8~O_stdCML8?RGgvb^l$!nip0coEUA zG%gFg?+8+T?u*Q_f*2sASB0dIbk5^YR9>VsCc6X@_{3y0y}yH*nJv4gP51A^SKaAt zL^d=~tb_X&(dR||4Y_ip2hQ7$-%fc-z=tjdL&@ncNAfbMZMoMkLC8P`i)w{?q&@E&zD%1ZwX> z^JVj}wY$Y5Yu4A9GjGf~LPy3A{HTm`hkQL?f7H>eOAA08%JS-R6*A@__Le+60017= zdrfskJZvg#1Pf1DNlpuq1OFsUbi~=y&+ig6C zfP?`6HwY4B8vp=v0|2|`0Dwpu06^}R@$I!3f`R3xWatS1kTLv8NXlCD#{dA5p}mfQ zmx0>y+A-;XD1g=5npk-eSyvBhpa3U7CpVo0HV_CD^RTiJ(UMd6cXh;-IGvrBmzxL|myeGRrw<>e ztA{NYkFc;X7dI~#FE0l|g2VHzix&dTxOl$!my-Y1BWLYt>0$5YW$)?&{G%6S;R^N= zr=$C0=s(B5+UaF)^FNkcJpbJ-L3N!`>QU`Hy}H9p(45}fi1@MpW7yZ{i=(}5CFg-`r~nFfEB18_$qmpI%xE^ z?J@?3yfI*~pYRE4XK566qr+mY>HL)7&g@LSq`Vu)zQ=AN|Yv-#O zhZ5_CjQE<>p)=k&C3ppT`fO0}&t zXpHetc(7AY)7MZ_f+!E^~cT4RoW6iFu+D0MBUX0Z(eU-a3@E)QFYvdoULcJ*_!!YU!&}0 z&zY2NWYlZnDDsQi+jF{pB2zxcR!&#N^tRR=h`;g9ar|kaI}-}Ot|Epv4ZOg#7V*CB zJCNrnkT)Y3HGTfD6Beip^76`;XGU9~9WUf(x{9yg(-6Oek}p;G)ebv;d91Z|7#NRb zUrl@A)|5`@NvD*y?$s*o&V*MkSe+?^yksO)jl5O(q0`n1ldq{bu212h1ZktN~Vg(C=`_v#EI$59x%;PyzJmK`h8K-@q@`&QX}#r-to%OJjLC^#`TVOho~sk- z$JcS%^op075w8c;iDaVQZ>O1>HoVAt6S4Og;CJfU^U571cR;Y0*f+4@-Mj9rTjRO~ z31cIC0sZcwCACjL3K)O`Oc|7yf=ZO3mjaSwK5KS#cLq^mv2}r?A;|5EEMn~H_7c9Yc}It4K_woz?P6hjIFhDIi*uKH}@3tuokyd^U<;*noC ze~H&yfkQ<_N`XhvLHNvv1h$s4v@v?NxgX^=Jq_B@H#S>Ezs5E$37@4p(d

qY`(m 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 T1wwy;&|e_*7YO~o1w#J?{q%TD diff --git a/dist/citra.ico b/dist/citra.ico index 4fef651e2a829a90a2a7f604b81eaa704b3f9369..2c408b9352295fdca33634f11df7f7f4ec227088 100644 GIT binary patch literal 370070 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

dI5_U}a=H~Yqup1sHL>8ZMjPSSTv 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�Ffcu58 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

L!%4qzrBnMk#N{p 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 diff --git a/dist/citra.svg b/dist/citra.svg index 7b299cd89a..b6abc1ccfb 100644 --- a/dist/citra.svg +++ b/dist/citra.svg @@ -1,80 +1,2 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +image/svg+xml diff --git a/dist/doc-icon.png b/dist/doc-icon.png index 420b1546f9689497019f463cef12b713753b7dc3..9b5773214cff15cbe063b0ae0d76b5bbdb30cc39 100644 GIT binary patch literal 7768 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 N002ovPDHLkV1g0DNa_Fp From 54c0c8adee90d374e954e742d6d03279ef2e7ed7 Mon Sep 17 00:00:00 2001 From: wwylele Date: Sun, 20 Aug 2017 08:37:48 +0300 Subject: [PATCH 080/195] HID: fix a comment and a warning --- src/core/hle/service/hid/hid.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index a13b72e883..31f34a7ae2 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -203,7 +203,7 @@ static void UpdateAccelerometerCallback(u64 userdata, int cycles_late) { Math::Vec3 accel; std::tie(accel, std::ignore) = motion_device->GetStatus(); accel *= accelerometer_coef; - // TODO(wwylele): do a time stretch as it in UpdateGyroscopeCallback + // TODO(wwylele): do a time stretch like the one in UpdateGyroscopeCallback // The time stretch formula should be like // stretched_vector = (raw_vector - gravity) * stretch_ratio + gravity @@ -246,7 +246,7 @@ static void UpdateGyroscopeCallback(u64 userdata, int cycles_late) { Math::Vec3 gyro; std::tie(std::ignore, gyro) = motion_device->GetStatus(); - float stretch = Core::System::GetInstance().perf_stats.GetLastFrameTimeScale(); + double stretch = Core::System::GetInstance().perf_stats.GetLastFrameTimeScale(); gyro *= gyroscope_coef * stretch; gyroscope_entry.x = static_cast(gyro.x); gyroscope_entry.y = static_cast(gyro.y); From 056a08cdbfc593af6899ce3ef45fc62a6ff45ef7 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Thu, 17 Aug 2017 13:18:39 +0100 Subject: [PATCH 081/195] externals: Update soundtouch --- externals/soundtouch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/externals/soundtouch b/externals/soundtouch index 5274ec4dec..019d2089bb 160000 --- a/externals/soundtouch +++ b/externals/soundtouch @@ -1 +1 @@ -Subproject commit 5274ec4dec498bd88ccbcd28862a0f78a3b95eff +Subproject commit 019d2089bbadf70d73ba85aa8ea51490b071262c From 1eca380886b5028e027f1380c04f221ac94ed47d Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 17 Aug 2017 10:46:59 +0300 Subject: [PATCH 082/195] gl_rasterizer: add clipping plane z<=0 defined in PICA --- src/video_core/renderer_opengl/gl_rasterizer.cpp | 3 +++ src/video_core/renderer_opengl/gl_shader_gen.cpp | 2 ++ src/video_core/renderer_opengl/gl_state.cpp | 13 +++++++++++++ src/video_core/renderer_opengl/gl_state.h | 3 +++ 4 files changed, 21 insertions(+) diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 1c6c15a58b..aa95ef21da 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -28,6 +28,9 @@ MICROPROFILE_DEFINE(OpenGL_Blits, "OpenGL", "Blits", MP_RGB(100, 100, 255)); MICROPROFILE_DEFINE(OpenGL_CacheManagement, "OpenGL", "Cache Mgmt", MP_RGB(100, 255, 100)); RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) { + // Clipping plane 0 is always enabled for PICA fixed clip plane z <= 0 + state.clip_distance[0] = true; + // Create sampler objects for (size_t i = 0; i < texture_samplers.size(); ++i) { texture_samplers[i].Create(); diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index ae67aab052..0dae4b91ea 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -1196,6 +1196,8 @@ void main() { normquat = vert_normquat; view = vert_view; gl_Position = vec4(vert_position.x, vert_position.y, -vert_position.z, vert_position.w); + gl_ClipDistance[0] = -vert_position.z; // fixed PICA clipping plane z <= 0 + // TODO (wwylele): calculate gl_ClipDistance[1] from user-defined clipping plane } )"; diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index bc9d34b840..06a905766f 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp @@ -68,6 +68,8 @@ OpenGLState::OpenGLState() { draw.vertex_buffer = 0; draw.uniform_buffer = 0; draw.shader_program = 0; + + clip_distance = {}; } void OpenGLState::Apply() const { @@ -261,6 +263,17 @@ void OpenGLState::Apply() const { glUseProgram(draw.shader_program); } + // Clip distance + for (size_t i = 0; i < clip_distance.size(); ++i) { + if (clip_distance[i] != cur_state.clip_distance[i]) { + if (clip_distance[i]) { + glEnable(GL_CLIP_DISTANCE0 + i); + } else { + glDisable(GL_CLIP_DISTANCE0 + i); + } + } + } + cur_state = *this; } diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h index 745a74479a..437fe34c47 100644 --- a/src/video_core/renderer_opengl/gl_state.h +++ b/src/video_core/renderer_opengl/gl_state.h @@ -4,6 +4,7 @@ #pragma once +#include #include namespace TextureUnits { @@ -123,6 +124,8 @@ public: GLuint shader_program; // GL_CURRENT_PROGRAM } draw; + std::array clip_distance; // GL_CLIP_DISTANCE + OpenGLState(); /// Get the currently active OpenGL state From 5a4af616c67a4d7968c71b419795777c3601341b Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 17 Aug 2017 10:56:15 +0300 Subject: [PATCH 083/195] gl_shader_gen: simplify and clarify the depth transformation between vertex shader and fragment shader --- src/video_core/renderer_opengl/gl_shader_gen.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index 0dae4b91ea..015e69da97 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -1112,7 +1112,10 @@ vec4 secondary_fragment_color = vec4(0.0); "gl_FragCoord.y < scissor_y2)) discard;\n"; } - out += "float z_over_w = 1.0 - gl_FragCoord.z * 2.0;\n"; + // After perspective divide, OpenGL transform z_over_w from [-1, 1] to [near, far]. Here we use + // default near = 0 and far = 1, and undo the transformation to get the original z_over_w, then + // do our own transformation according to PICA specification. + out += "float z_over_w = 2.0 * gl_FragCoord.z - 1.0;\n"; out += "float depth = z_over_w * depth_scale + depth_offset;\n"; if (state.depthmap_enable == RasterizerRegs::DepthBuffering::WBuffering) { out += "depth /= gl_FragCoord.w;\n"; @@ -1195,7 +1198,7 @@ void main() { texcoord0_w = vert_texcoord0_w; normquat = vert_normquat; view = vert_view; - gl_Position = vec4(vert_position.x, vert_position.y, -vert_position.z, vert_position.w); + gl_Position = vert_position; gl_ClipDistance[0] = -vert_position.z; // fixed PICA clipping plane z <= 0 // TODO (wwylele): calculate gl_ClipDistance[1] from user-defined clipping plane } From 72b26ac32f74457d017e4eb96d83e2a66e713a5a Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 17 Aug 2017 10:57:31 +0300 Subject: [PATCH 084/195] swrasterizer/clipper: remove tested TODO hwtested. Current implementation is the correct behavior --- src/video_core/swrasterizer/clipper.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/video_core/swrasterizer/clipper.cpp b/src/video_core/swrasterizer/clipper.cpp index 7537689b7f..cdbc715026 100644 --- a/src/video_core/swrasterizer/clipper.cpp +++ b/src/video_core/swrasterizer/clipper.cpp @@ -125,10 +125,6 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu {Math::MakeVec(f0, f0, f0, -f1), Math::Vec4(f0, f0, f0, EPSILON)}, // w = EPSILON }}; - // TODO: If one vertex lies outside one of the depth clipping planes, some platforms (e.g. Wii) - // drop the whole primitive instead of clipping the primitive properly. We should test if - // this happens on the 3DS, too. - // Simple implementation of the Sutherland-Hodgman clipping algorithm. // TODO: Make this less inefficient (currently lots of useless buffering overhead happens here) for (auto edge : clipping_edges) { From 63b6e802cdffc1464b4a1fe3f5171d71146e8e9a Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 17 Aug 2017 11:02:19 +0300 Subject: [PATCH 085/195] swrasterizer: remove invalid TODO This function is called in clipping, before the pespective divide, and is not used in later rasterization. Thus it doesn't need perspective correction. --- src/video_core/swrasterizer/rasterizer.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/video_core/swrasterizer/rasterizer.h b/src/video_core/swrasterizer/rasterizer.h index 2f08775813..66cd6cfd49 100644 --- a/src/video_core/swrasterizer/rasterizer.h +++ b/src/video_core/swrasterizer/rasterizer.h @@ -19,10 +19,9 @@ struct Vertex : Shader::OutputVertex { // Linear interpolation // factor: 0=this, 1=vtx + // Note: This function cannot be called after perspective divide void Lerp(float24 factor, const Vertex& vtx) { pos = pos * factor + vtx.pos * (float24::FromFloat32(1) - factor); - - // TODO: Should perform perspective correct interpolation here... quat = quat * factor + vtx.quat * (float24::FromFloat32(1) - factor); color = color * factor + vtx.color * (float24::FromFloat32(1) - factor); tc0 = tc0 * factor + vtx.tc0 * (float24::FromFloat32(1) - factor); @@ -30,12 +29,11 @@ struct Vertex : Shader::OutputVertex { tc0_w = tc0_w * factor + vtx.tc0_w * (float24::FromFloat32(1) - factor); view = view * factor + vtx.view * (float24::FromFloat32(1) - factor); tc2 = tc2 * factor + vtx.tc2 * (float24::FromFloat32(1) - factor); - - screenpos = screenpos * factor + vtx.screenpos * (float24::FromFloat32(1) - factor); } // Linear interpolation // factor: 0=v0, 1=v1 + // Note: This function cannot be called after perspective divide static Vertex Lerp(float24 factor, const Vertex& v0, const Vertex& v1) { Vertex ret = v0; ret.Lerp(factor, v1); From d3fb1d6c3882e45dee66fe7e5cf7613268e1b7bb Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 19 Aug 2017 11:28:22 -0500 Subject: [PATCH 086/195] Dyncom: Fixed a conversion warning when decoding thumb instructions. --- src/core/arm/dyncom/arm_dyncom_interpreter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp index f4fbb8d04f..f829b92298 100644 --- a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp +++ b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp @@ -759,7 +759,7 @@ static ThumbDecodeStatus DecodeThumbInstruction(u32 inst, u32 addr, u32* arm_ins ThumbDecodeStatus ret = TranslateThumbInstruction(addr, inst, arm_inst, inst_size); if (ret == ThumbDecodeStatus::BRANCH) { int inst_index; - int table_length = arm_instruction_trans_len; + int table_length = static_cast(arm_instruction_trans_len); u32 tinstr = GetThumbInstruction(inst, addr); switch ((tinstr & 0xF800) >> 11) { From 9d0841b48b6b6f3c5a2425922617343fc2f79cdc Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 19 Aug 2017 11:30:20 -0500 Subject: [PATCH 087/195] Dyncom: Use size_t instead of int to store the instruction offsets in the instruction cache. Fixes a few warnings. --- src/core/arm/dyncom/arm_dyncom_interpreter.cpp | 6 +++--- src/core/arm/skyeye_common/armstate.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp index f829b92298..3522d1e82a 100644 --- a/src/core/arm/dyncom/arm_dyncom_interpreter.cpp +++ b/src/core/arm/dyncom/arm_dyncom_interpreter.cpp @@ -838,7 +838,7 @@ static unsigned int InterpreterTranslateInstruction(const ARMul_State* cpu, cons return inst_size; } -static int InterpreterTranslateBlock(ARMul_State* cpu, int& bb_start, u32 addr) { +static int InterpreterTranslateBlock(ARMul_State* cpu, std::size_t& bb_start, u32 addr) { MICROPROFILE_SCOPE(DynCom_Decode); // Decode instruction, get index @@ -871,7 +871,7 @@ static int InterpreterTranslateBlock(ARMul_State* cpu, int& bb_start, u32 addr) return KEEP_GOING; } -static int InterpreterTranslateSingle(ARMul_State* cpu, int& bb_start, u32 addr) { +static int InterpreterTranslateSingle(ARMul_State* cpu, std::size_t& bb_start, u32 addr) { MICROPROFILE_SCOPE(DynCom_Decode); ARM_INST_PTR inst_base = nullptr; @@ -1620,7 +1620,7 @@ unsigned InterpreterMainLoop(ARMul_State* cpu) { unsigned int addr; unsigned int num_instrs = 0; - int ptr; + std::size_t ptr; LOAD_NZCVT; DISPATCH : { diff --git a/src/core/arm/skyeye_common/armstate.h b/src/core/arm/skyeye_common/armstate.h index 1a707ff7ed..893877797b 100644 --- a/src/core/arm/skyeye_common/armstate.h +++ b/src/core/arm/skyeye_common/armstate.h @@ -230,7 +230,7 @@ public: // TODO(bunnei): Move this cache to a better place - it should be per codeset (likely per // process for our purposes), not per ARMul_State (which tracks CPU core state). - std::unordered_map instruction_cache; + std::unordered_map instruction_cache; private: void ResetMPCoreCP15Registers(); From d237a890482b62c90c58691863dabd609c2aa34e Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 19 Aug 2017 11:33:01 -0500 Subject: [PATCH 088/195] CPU/Dynarmic: Fixed a warning when incrementing the number of ticks in ExecuteInstructions. --- src/core/arm/dynarmic/arm_dynarmic.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index 7d2790b08f..0a0b91590e 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp @@ -136,7 +136,7 @@ MICROPROFILE_DEFINE(ARM_Jit, "ARM JIT", "ARM JIT", MP_RGB(255, 64, 64)); void ARM_Dynarmic::ExecuteInstructions(int num_instructions) { MICROPROFILE_SCOPE(ARM_Jit); - unsigned ticks_executed = jit->Run(static_cast(num_instructions)); + std::size_t ticks_executed = jit->Run(static_cast(num_instructions)); AddTicks(ticks_executed); } From 145a7293a32c6fb25f1db796f7e1dd6c4efc985e Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 19 Aug 2017 11:37:21 -0500 Subject: [PATCH 089/195] HLE/Applets: Fixed some conversion warnings when creating the framebuffer shared memory objects. --- src/core/hle/applets/erreula.cpp | 4 ++-- src/core/hle/applets/mii_selector.cpp | 4 ++-- src/core/hle/applets/mint.cpp | 4 ++-- src/core/hle/applets/swkbd.cpp | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/core/hle/applets/erreula.cpp b/src/core/hle/applets/erreula.cpp index 75d7fd9fc3..518f371f57 100644 --- a/src/core/hle/applets/erreula.cpp +++ b/src/core/hle/applets/erreula.cpp @@ -31,8 +31,8 @@ ResultCode ErrEula::ReceiveParameter(const Service::APT::MessageParameter& param heap_memory = std::make_shared>(capture_info.size); // Create a SharedMemory that directly points to this heap block. framebuffer_memory = Kernel::SharedMemory::CreateForApplet( - heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, - MemoryPermission::ReadWrite, "ErrEula Memory"); + heap_memory, 0, capture_info.size, MemoryPermission::ReadWrite, MemoryPermission::ReadWrite, + "ErrEula Memory"); // Send the response message with the newly created SharedMemory Service::APT::MessageParameter result; diff --git a/src/core/hle/applets/mii_selector.cpp b/src/core/hle/applets/mii_selector.cpp index 89f08daa2b..705859f1e2 100644 --- a/src/core/hle/applets/mii_selector.cpp +++ b/src/core/hle/applets/mii_selector.cpp @@ -38,8 +38,8 @@ ResultCode MiiSelector::ReceiveParameter(const Service::APT::MessageParameter& p heap_memory = std::make_shared>(capture_info.size); // Create a SharedMemory that directly points to this heap block. framebuffer_memory = Kernel::SharedMemory::CreateForApplet( - heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, - MemoryPermission::ReadWrite, "MiiSelector Memory"); + heap_memory, 0, capture_info.size, MemoryPermission::ReadWrite, MemoryPermission::ReadWrite, + "MiiSelector Memory"); // Send the response message with the newly created SharedMemory Service::APT::MessageParameter result; diff --git a/src/core/hle/applets/mint.cpp b/src/core/hle/applets/mint.cpp index 31a79ea173..50d79190b2 100644 --- a/src/core/hle/applets/mint.cpp +++ b/src/core/hle/applets/mint.cpp @@ -31,8 +31,8 @@ ResultCode Mint::ReceiveParameter(const Service::APT::MessageParameter& paramete heap_memory = std::make_shared>(capture_info.size); // Create a SharedMemory that directly points to this heap block. framebuffer_memory = Kernel::SharedMemory::CreateForApplet( - heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, - MemoryPermission::ReadWrite, "Mint Memory"); + heap_memory, 0, capture_info.size, MemoryPermission::ReadWrite, MemoryPermission::ReadWrite, + "Mint Memory"); // Send the response message with the newly created SharedMemory Service::APT::MessageParameter result; diff --git a/src/core/hle/applets/swkbd.cpp b/src/core/hle/applets/swkbd.cpp index fdf8807b03..0bc471a3a8 100644 --- a/src/core/hle/applets/swkbd.cpp +++ b/src/core/hle/applets/swkbd.cpp @@ -41,8 +41,8 @@ ResultCode SoftwareKeyboard::ReceiveParameter(Service::APT::MessageParameter con heap_memory = std::make_shared>(capture_info.size); // Create a SharedMemory that directly points to this heap block. framebuffer_memory = Kernel::SharedMemory::CreateForApplet( - heap_memory, 0, heap_memory->size(), MemoryPermission::ReadWrite, - MemoryPermission::ReadWrite, "SoftwareKeyboard Memory"); + heap_memory, 0, capture_info.size, MemoryPermission::ReadWrite, MemoryPermission::ReadWrite, + "SoftwareKeyboard Memory"); // Send the response message with the newly created SharedMemory Service::APT::MessageParameter result; From 65f19b51c43fbc35a1f1bfb81d773eaf6b5fffd3 Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 19 Aug 2017 12:04:40 -0500 Subject: [PATCH 090/195] Warnings: Add UNREACHABLE macros to switches that contemplate all possible values. --- src/core/file_sys/archive_backend.cpp | 2 ++ src/core/hle/kernel/kernel.h | 3 +++ src/core/hw/gpu.h | 4 ++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/core/file_sys/archive_backend.cpp b/src/core/file_sys/archive_backend.cpp index 1fae0ede0d..87a240d7a8 100644 --- a/src/core/file_sys/archive_backend.cpp +++ b/src/core/file_sys/archive_backend.cpp @@ -90,6 +90,8 @@ std::u16string Path::AsU16Str() const { LOG_ERROR(Service_FS, "LowPathType cannot be converted to u16string!"); return {}; } + + UNREACHABLE(); } std::vector Path::AsBinary() const { diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index 9cf288b084..142bb84b20 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h @@ -8,6 +8,7 @@ #include #include #include +#include "common/assert.h" #include "common/common_types.h" namespace Kernel { @@ -84,6 +85,8 @@ public: case HandleType::ClientSession: return false; } + + UNREACHABLE(); } public: diff --git a/src/core/hw/gpu.h b/src/core/hw/gpu.h index 21b127fee4..e3d0a0e086 100644 --- a/src/core/hw/gpu.h +++ b/src/core/hw/gpu.h @@ -74,9 +74,9 @@ struct Regs { case PixelFormat::RGB5A1: case PixelFormat::RGBA4: return 2; - default: - UNIMPLEMENTED(); } + + UNREACHABLE(); } INSERT_PADDING_WORDS(0x4); From 8a9a4e2c42b6c2326140f7369374bf78a4645a8f Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 19 Aug 2017 12:09:35 -0500 Subject: [PATCH 091/195] GPU/Warnings: Explicitly cast the screen refresh ticks to u64. --- src/core/hw/gpu.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/hw/gpu.cpp b/src/core/hw/gpu.cpp index 6838e449ca..83ad9d898a 100644 --- a/src/core/hw/gpu.cpp +++ b/src/core/hw/gpu.cpp @@ -29,7 +29,7 @@ namespace GPU { Regs g_regs; /// 268MHz CPU clocks / 60Hz frames per second -const u64 frame_ticks = BASE_CLOCK_RATE_ARM11 / SCREEN_REFRESH_RATE; +const u64 frame_ticks = static_cast(BASE_CLOCK_RATE_ARM11 / SCREEN_REFRESH_RATE); /// Event id for CoreTiming static int vblank_event; From fa228ca637b84e6441879769d54a531ab6aba113 Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 21 Aug 2017 20:54:29 -0500 Subject: [PATCH 092/195] Kernel/Threads: Don't immediately switch to the new main thread when loading a new process. This is necessary for loading multiple processes at the same time. The main thread will be automatically scheduled when necessary once the scheduler runs. --- src/core/hle/kernel/thread.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index f5f2eb2f7f..b957c45dd4 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -478,8 +478,6 @@ void Thread::BoostPriority(s32 priority) { } SharedPtr SetupMainThread(u32 entry_point, s32 priority) { - DEBUG_ASSERT(!GetCurrentThread()); - // Initialize new "main" thread auto thread_res = Thread::Create("main", entry_point, priority, 0, THREADPROCESSORID_0, Memory::HEAP_VADDR_END); @@ -489,9 +487,7 @@ SharedPtr SetupMainThread(u32 entry_point, s32 priority) { thread->context.fpscr = FPSCR_DEFAULT_NAN | FPSCR_FLUSH_TO_ZERO | FPSCR_ROUND_TOZERO | FPSCR_IXC; // 0x03C00010 - // Run new "main" thread - SwitchContext(thread.get()); - + // Note: The newly created thread will be run when the scheduler fires. return thread; } From 3e478ca13110639a67ad95880aae5d7d13e096b7 Mon Sep 17 00:00:00 2001 From: wwylele Date: Fri, 18 Aug 2017 15:04:56 +0300 Subject: [PATCH 093/195] SwRasterizer/Lighting: implement bump mapping --- src/video_core/swrasterizer/lighting.cpp | 28 ++++++++++++++++++---- src/video_core/swrasterizer/lighting.h | 3 ++- src/video_core/swrasterizer/rasterizer.cpp | 4 ++-- 3 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/video_core/swrasterizer/lighting.cpp b/src/video_core/swrasterizer/lighting.cpp index 39a3e396d6..4f16bac07a 100644 --- a/src/video_core/swrasterizer/lighting.cpp +++ b/src/video_core/swrasterizer/lighting.cpp @@ -22,14 +22,32 @@ static float LookupLightingLut(const Pica::State::Lighting& lighting, size_t lut std::tuple, Math::Vec4> ComputeFragmentsColors( const Pica::LightingRegs& lighting, const Pica::State::Lighting& lighting_state, - const Math::Quaternion& normquat, const Math::Vec3& view) { + const Math::Quaternion& normquat, const Math::Vec3& view, + const Math::Vec4 (&texture_color)[4]) { - // TODO(Subv): Bump mapping - Math::Vec3 surface_normal = {0.0f, 0.0f, 1.0f}; + Math::Vec3 surface_normal; + Math::Vec3 surface_tangent; if (lighting.config0.bump_mode != LightingRegs::LightingBumpMode::None) { - LOG_CRITICAL(HW_GPU, "unimplemented bump mapping"); - UNIMPLEMENTED(); + Math::Vec3 perturbation = + texture_color[lighting.config0.bump_selector].xyz().Cast() / 127.5f - + Math::MakeVec(1.0f, 1.0f, 1.0f); + if (lighting.config0.bump_mode == LightingRegs::LightingBumpMode::NormalMap) { + if (!lighting.config0.disable_bump_renorm) { + const float z_square = 1 - perturbation.xy().Length2(); + perturbation.z = std::sqrt(std::max(z_square, 0.0f)); + } + surface_normal = perturbation; + surface_tangent = Math::MakeVec(1.0f, 0.0f, 0.0f); + } else if (lighting.config0.bump_mode == LightingRegs::LightingBumpMode::TangentMap) { + surface_normal = Math::MakeVec(0.0f, 0.0f, 1.0f); + surface_tangent = perturbation; + } else { + LOG_ERROR(HW_GPU, "Unknown bump mode %u", lighting.config0.bump_mode.Value()); + } + } else { + surface_normal = Math::MakeVec(0.0f, 0.0f, 1.0f); + surface_tangent = Math::MakeVec(1.0f, 0.0f, 0.0f); } // Use the normalized the quaternion when performing the rotation diff --git a/src/video_core/swrasterizer/lighting.h b/src/video_core/swrasterizer/lighting.h index 438dca926b..d807a3d948 100644 --- a/src/video_core/swrasterizer/lighting.h +++ b/src/video_core/swrasterizer/lighting.h @@ -13,6 +13,7 @@ namespace Pica { std::tuple, Math::Vec4> ComputeFragmentsColors( const Pica::LightingRegs& lighting, const Pica::State::Lighting& lighting_state, - const Math::Quaternion& normquat, const Math::Vec3& view); + const Math::Quaternion& normquat, const Math::Vec3& view, + const Math::Vec4 (&texture_color)[4]); } // namespace Pica diff --git a/src/video_core/swrasterizer/rasterizer.cpp b/src/video_core/swrasterizer/rasterizer.cpp index fdc1df1993..862135614c 100644 --- a/src/video_core/swrasterizer/rasterizer.cpp +++ b/src/video_core/swrasterizer/rasterizer.cpp @@ -437,8 +437,8 @@ static void ProcessTriangleInternal(const Vertex& v0, const Vertex& v1, const Ve GetInterpolatedAttribute(v0.view.y, v1.view.y, v2.view.y).ToFloat32(), GetInterpolatedAttribute(v0.view.z, v1.view.z, v2.view.z).ToFloat32(), }; - std::tie(primary_fragment_color, secondary_fragment_color) = - ComputeFragmentsColors(g_state.regs.lighting, g_state.lighting, normquat, view); + std::tie(primary_fragment_color, secondary_fragment_color) = ComputeFragmentsColors( + g_state.regs.lighting, g_state.lighting, normquat, view, texture_color); } for (unsigned tev_stage_index = 0; tev_stage_index < tev_stages.size(); From b5aa5703540adceb1fc867b577dad50388a47e15 Mon Sep 17 00:00:00 2001 From: wwylele Date: Fri, 18 Aug 2017 16:35:11 +0300 Subject: [PATCH 094/195] SwRasterizer/Lighting: implement LUT input CP --- src/video_core/swrasterizer/lighting.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/video_core/swrasterizer/lighting.cpp b/src/video_core/swrasterizer/lighting.cpp index 4f16bac07a..b389645307 100644 --- a/src/video_core/swrasterizer/lighting.cpp +++ b/src/video_core/swrasterizer/lighting.cpp @@ -52,6 +52,7 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( // Use the normalized the quaternion when performing the rotation auto normal = Math::QuaternionRotate(normquat, surface_normal); + auto tangent = Math::QuaternionRotate(normquat, surface_tangent); Math::Vec4 diffuse_sum = {0.0f, 0.0f, 0.0f, 1.0f}; Math::Vec4 specular_sum = {0.0f, 0.0f, 0.0f, 1.0f}; @@ -120,6 +121,16 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( result = Math::Dot(light_vector, spot_dir.Cast() / 2047.0f); break; } + case LightingRegs::LightingLutInput::CP: + if (lighting.config0.config == LightingRegs::LightingConfig::Config7) { + const Math::Vec3 norm_half_vector = half_vector.Normalized(); + const Math::Vec3 half_vector_proj = + norm_half_vector - normal * Math::Dot(normal, norm_half_vector); + result = Math::Dot(half_vector_proj, tangent); + } else { + result = 0.0f; + } + break; default: LOG_CRITICAL(HW_GPU, "Unknown lighting LUT input %u\n", static_cast(input)); UNIMPLEMENTED(); From 17c6104d2afda7bf354c454f87561a3dbdf524e3 Mon Sep 17 00:00:00 2001 From: wwylele Date: Mon, 21 Aug 2017 12:03:38 +0300 Subject: [PATCH 095/195] gl_rasterizer/lighting: more accurate CP formula --- src/video_core/renderer_opengl/gl_shader_gen.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index ae67aab052..d85f281e51 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -594,8 +594,8 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) { // Note: even if the normal vector is modified by normal map, which is not the // normal of the tangent plane anymore, the half angle vector is still projected // using the modified normal vector. - std::string half_angle_proj = "normalize(half_vector) - normal / dot(normal, " - "normal) * dot(normal, normalize(half_vector))"; + std::string half_angle_proj = + "normalize(half_vector) - normal * dot(normal, normalize(half_vector))"; // Note: the half angle vector projection is confirmed not normalized before the dot // product. The result is in fact not cos(phi) as the name suggested. index = "dot(" + half_angle_proj + ", tangent)"; From 4d058cfb768c10807359a1ffd2dbaf1eac589c1c Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 22 Aug 2017 11:43:44 +0300 Subject: [PATCH 096/195] motion_emu: fix initialization order --- src/input_common/motion_emu.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/input_common/motion_emu.cpp b/src/input_common/motion_emu.cpp index a1761f1846..59a035e701 100644 --- a/src/input_common/motion_emu.cpp +++ b/src/input_common/motion_emu.cpp @@ -74,11 +74,14 @@ private: bool is_tilting = false; Common::Event shutdown_event; - std::thread motion_emu_thread; std::tuple, Math::Vec3> status; std::mutex status_mutex; + // Note: always keep the thread declaration at the end so that other objects are initialized + // before this! + std::thread motion_emu_thread; + void MotionEmuThread() { auto update_time = std::chrono::steady_clock::now(); Math::Quaternion q = MakeQuaternion(Math::Vec3(), 0); From bca8916cea9c437d82509f8350fa3b858720f90e Mon Sep 17 00:00:00 2001 From: Subv Date: Thu, 20 Jul 2017 23:52:50 -0500 Subject: [PATCH 097/195] Kernel/HLE: Use a mutex to synchronize access to the HLE kernel state between the cpu thread and any other possible threads that might touch the kernel (network thread, etc). This mutex is acquired in SVC::CallSVC, ie, as soon as the guest application enters the HLE kernel, and should be acquired by the aforementioned threads before modifying kernel structures. --- src/core/CMakeLists.txt | 2 ++ src/core/hle/kernel/kernel.h | 2 +- src/core/hle/lock.cpp | 11 +++++++++++ src/core/hle/lock.h | 18 ++++++++++++++++++ src/core/hle/svc.cpp | 8 ++++++-- 5 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 src/core/hle/lock.cpp create mode 100644 src/core/hle/lock.h diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 360f407f3d..14027e182a 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -60,6 +60,7 @@ set(SRCS hle/kernel/timer.cpp hle/kernel/vm_manager.cpp hle/kernel/wait_object.cpp + hle/lock.cpp hle/romfs.cpp hle/service/ac/ac.cpp hle/service/ac/ac_i.cpp @@ -258,6 +259,7 @@ set(HEADERS hle/kernel/timer.h hle/kernel/vm_manager.h hle/kernel/wait_object.h + hle/lock.h hle/result.h hle/romfs.h hle/service/ac/ac.h diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h index 9cf288b084..255cda3594 100644 --- a/src/core/hle/kernel/kernel.h +++ b/src/core/hle/kernel/kernel.h @@ -129,4 +129,4 @@ void Init(u32 system_mode); /// Shutdown the kernel void Shutdown(); -} // namespace +} // namespace Kernel diff --git a/src/core/hle/lock.cpp b/src/core/hle/lock.cpp new file mode 100644 index 0000000000..082f689c86 --- /dev/null +++ b/src/core/hle/lock.cpp @@ -0,0 +1,11 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include + +namespace HLE { +std::mutex g_hle_lock; +} diff --git a/src/core/hle/lock.h b/src/core/hle/lock.h new file mode 100644 index 0000000000..8265621e1d --- /dev/null +++ b/src/core/hle/lock.h @@ -0,0 +1,18 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include + +namespace HLE { +/* + * Synchronizes access to the internal HLE kernel structures, it is acquired when a guest + * application thread performs a syscall. It should be acquired by any host threads that read or + * modify the HLE kernel state. Note: Any operation that directly or indirectly reads from or writes + * to the emulated memory is not protected by this mutex, and should be avoided in any threads other + * than the CPU thread. + */ +extern std::mutex g_hle_lock; +} // namespace HLE diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index e4b803046e..b98938cb4c 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -31,6 +31,7 @@ #include "core/hle/kernel/timer.h" #include "core/hle/kernel/vm_manager.h" #include "core/hle/kernel/wait_object.h" +#include "core/hle/lock.h" #include "core/hle/result.h" #include "core/hle/service/service.h" @@ -1188,7 +1189,7 @@ struct FunctionDef { Func* func; const char* name; }; -} +} // namespace static const FunctionDef SVC_Table[] = { {0x00, nullptr, "Unknown"}, @@ -1332,6 +1333,9 @@ MICROPROFILE_DEFINE(Kernel_SVC, "Kernel", "SVC", MP_RGB(70, 200, 70)); void CallSVC(u32 immediate) { MICROPROFILE_SCOPE(Kernel_SVC); + // Lock the global kernel mutex when we enter the kernel HLE. + std::lock_guard lock(HLE::g_hle_lock); + const FunctionDef* info = GetSVCInfo(immediate); if (info) { if (info->func) { @@ -1342,4 +1346,4 @@ void CallSVC(u32 immediate) { } } -} // namespace +} // namespace SVC From f484927ed03a1943a83f8781e598e07c056cc82a Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 21 Jul 2017 00:34:47 -0500 Subject: [PATCH 098/195] Kernel/Memory: Acquire the global HLE lock when a memory read/write operation falls outside of the fast path, for it might perform an MMIO operation. --- src/core/memory.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 9024f49225..72cbf2ec78 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -9,6 +9,7 @@ #include "common/logging/log.h" #include "common/swap.h" #include "core/hle/kernel/process.h" +#include "core/hle/lock.h" #include "core/memory.h" #include "core/memory_setup.h" #include "core/mmio.h" @@ -187,6 +188,9 @@ T Read(const VAddr vaddr) { return value; } + // The memory access might do an MMIO or cached access, so we have to lock the HLE kernel state + std::lock_guard lock(HLE::g_hle_lock); + PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; switch (type) { case PageType::Unmapped: @@ -226,6 +230,9 @@ void Write(const VAddr vaddr, const T data) { return; } + // The memory access might do an MMIO or cached access, so we have to lock the HLE kernel state + std::lock_guard lock(HLE::g_hle_lock); + PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; switch (type) { case PageType::Unmapped: @@ -722,4 +729,4 @@ VAddr PhysicalToVirtualAddress(const PAddr addr) { return addr | 0x80000000; } -} // namespace +} // namespace Memory From c84e60b4700778db236d3177714a076c515f9ce7 Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 8 Aug 2017 21:34:17 +0300 Subject: [PATCH 099/195] HID: use TouchDevice for touch pad --- src/core/frontend/input.h | 6 ++++++ src/core/hle/service/hid/hid.cpp | 12 ++++++++---- src/core/settings.h | 1 + 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/core/frontend/input.h b/src/core/frontend/input.h index 5916a901de..8c256beb59 100644 --- a/src/core/frontend/input.h +++ b/src/core/frontend/input.h @@ -126,4 +126,10 @@ using AnalogDevice = InputDevice>; */ using MotionDevice = InputDevice, Math::Vec3>>; +/** + * A touch device is an input device that returns a tuple of two floats and a bool. The floats are + * x and y coordinates in the range 0.0 - 1.0, and the bool indicates whether it is pressed. + */ +using TouchDevice = InputDevice>; + } // namespace Input diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index 31f34a7ae2..aa5d821f92 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -7,9 +7,9 @@ #include #include #include "common/logging/log.h" +#include "core/3ds.h" #include "core/core.h" #include "core/core_timing.h" -#include "core/frontend/emu_window.h" #include "core/frontend/input.h" #include "core/hle/ipc.h" #include "core/hle/kernel/event.h" @@ -19,7 +19,6 @@ #include "core/hle/service/hid/hid_spvr.h" #include "core/hle/service/hid/hid_user.h" #include "core/hle/service/service.h" -#include "video_core/video_core.h" namespace Service { namespace HID { @@ -59,6 +58,7 @@ static std::array, Settings::NativeButton:: buttons; static std::unique_ptr circle_pad; static std::unique_ptr motion_device; +static std::unique_ptr touch_device; DirectionState GetStickDirectionState(s16 circle_pad_x, s16 circle_pad_y) { // 30 degree and 60 degree are angular thresholds for directions @@ -96,6 +96,7 @@ static void LoadInputDevices() { circle_pad = Input::CreateDevice( Settings::values.analogs[Settings::NativeAnalog::CirclePad]); motion_device = Input::CreateDevice(Settings::values.motion_device); + touch_device = Input::CreateDevice(Settings::values.touch_device); } static void UnloadInputDevices() { @@ -104,6 +105,7 @@ static void UnloadInputDevices() { } circle_pad.reset(); motion_device.reset(); + touch_device.reset(); } static void UpdatePadCallback(u64 userdata, int cycles_late) { @@ -172,8 +174,10 @@ static void UpdatePadCallback(u64 userdata, int cycles_late) { // Get the current touch entry TouchDataEntry& touch_entry = mem->touch.entries[mem->touch.index]; bool pressed = false; - - std::tie(touch_entry.x, touch_entry.y, pressed) = VideoCore::g_emu_window->GetTouchState(); + float x, y; + std::tie(x, y, pressed) = touch_device->GetStatus(); + touch_entry.x = static_cast(x * Core::kScreenBottomWidth); + touch_entry.y = static_cast(y * Core::kScreenBottomHeight); touch_entry.valid.Assign(pressed ? 1 : 0); // TODO(bunnei): We're not doing anything with offset 0xA8 + 0x18 of HID SharedMemory, which diff --git a/src/core/settings.h b/src/core/settings.h index 7e15b119b7..088d7651aa 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -80,6 +80,7 @@ struct Values { std::array buttons; std::array analogs; std::string motion_device; + std::string touch_device; // Core bool use_cpu_jit; From 2617de1fe6f6f1fc846a8e038e1ea77a894554b2 Mon Sep 17 00:00:00 2001 From: wwylele Date: Wed, 9 Aug 2017 02:57:42 +0300 Subject: [PATCH 100/195] EmuWindow: refactor touch input into a TouchDevice --- src/citra/config.cpp | 2 + src/citra/default_ini.h | 4 ++ src/citra_qt/configuration/config.cpp | 3 ++ src/core/frontend/emu_window.cpp | 71 ++++++++++++++++++++++----- src/core/frontend/emu_window.h | 31 ++---------- 5 files changed, 72 insertions(+), 39 deletions(-) diff --git a/src/citra/config.cpp b/src/citra/config.cpp index 73846ed915..93569fc4c1 100644 --- a/src/citra/config.cpp +++ b/src/citra/config.cpp @@ -78,6 +78,8 @@ void Config::ReadValues() { Settings::values.motion_device = sdl2_config->Get( "Controls", "motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01"); + Settings::values.touch_device = + sdl2_config->Get("Controls", "touch_device", "engine:emu_window"); // Core Settings::values.use_cpu_jit = sdl2_config->GetBoolean("Core", "use_cpu_jit", true); diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h index 9ea779dd84..fa9dda651b 100644 --- a/src/citra/default_ini.h +++ b/src/citra/default_ini.h @@ -62,6 +62,10 @@ c_stick= # - "sensitivity": the coefficient converting mouse movement to tilting angle (default to 0.01) motion_device= +# for touch input, the following devices are available: +# - "emu_window" (default) for emulating touch input from mouse input to the emulation window. No parameters required +touch_device= + [Core] # Whether to use the Just-In-Time (JIT) compiler for CPU emulation # 0: Interpreter (slow), 1 (default): JIT (fast) diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index 6e42db0072..e398c6f292 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -61,6 +61,8 @@ void Config::ReadValues() { qt_config->value("motion_device", "engine:motion_emu,update_period:100,sensitivity:0.01") .toString() .toStdString(); + Settings::values.touch_device = + qt_config->value("touch_device", "engine:emu_window").toString().toStdString(); qt_config->endGroup(); @@ -209,6 +211,7 @@ void Config::SaveValues() { QString::fromStdString(Settings::values.analogs[i])); } qt_config->setValue("motion_device", QString::fromStdString(Settings::values.motion_device)); + qt_config->setValue("touch_device", QString::fromStdString(Settings::values.touch_device)); qt_config->endGroup(); qt_config->beginGroup("Core"); diff --git a/src/core/frontend/emu_window.cpp b/src/core/frontend/emu_window.cpp index 60b20d4e2c..787c517ff6 100644 --- a/src/core/frontend/emu_window.cpp +++ b/src/core/frontend/emu_window.cpp @@ -2,14 +2,55 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include #include -#include "common/assert.h" -#include "core/3ds.h" -#include "core/core.h" +#include #include "core/frontend/emu_window.h" +#include "core/frontend/input.h" #include "core/settings.h" +class EmuWindow::TouchState : public Input::Factory, + public std::enable_shared_from_this { +public: + std::unique_ptr Create(const Common::ParamPackage&) override { + return std::make_unique(shared_from_this()); + } + + std::mutex mutex; + + bool touch_pressed = false; ///< True if touchpad area is currently pressed, otherwise false + + float touch_x = 0.0f; ///< Touchpad X-position + float touch_y = 0.0f; ///< Touchpad Y-position + +private: + class Device : public Input::TouchDevice { + public: + explicit Device(std::weak_ptr&& touch_state) : touch_state(touch_state) {} + std::tuple GetStatus() const override { + if (auto state = touch_state.lock()) { + std::lock_guard guard(state->mutex); + return std::make_tuple(state->touch_x, state->touch_y, state->touch_pressed); + } + return std::make_tuple(0.0f, 0.0f, false); + } + + private: + std::weak_ptr touch_state; + }; +}; + +EmuWindow::EmuWindow() { + // TODO: Find a better place to set this. + config.min_client_area_size = std::make_pair(400u, 480u); + active_config = config; + touch_state = std::make_shared(); + Input::RegisterFactory("emu_window", touch_state); +} + +EmuWindow::~EmuWindow() { + Input::UnregisterFactory("emu_window"); +} + /** * Check if the given x/y coordinates are within the touchpad specified by the framebuffer layout * @param layout FramebufferLayout object describing the framebuffer size and screen positions @@ -38,22 +79,26 @@ void EmuWindow::TouchPressed(unsigned framebuffer_x, unsigned framebuffer_y) { if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y)) return; - touch_x = Core::kScreenBottomWidth * (framebuffer_x - framebuffer_layout.bottom_screen.left) / - (framebuffer_layout.bottom_screen.right - framebuffer_layout.bottom_screen.left); - touch_y = Core::kScreenBottomHeight * (framebuffer_y - framebuffer_layout.bottom_screen.top) / - (framebuffer_layout.bottom_screen.bottom - framebuffer_layout.bottom_screen.top); + std::lock_guard guard(touch_state->mutex); + touch_state->touch_x = + static_cast(framebuffer_x - framebuffer_layout.bottom_screen.left) / + (framebuffer_layout.bottom_screen.right - framebuffer_layout.bottom_screen.left); + touch_state->touch_y = + static_cast(framebuffer_y - framebuffer_layout.bottom_screen.top) / + (framebuffer_layout.bottom_screen.bottom - framebuffer_layout.bottom_screen.top); - touch_pressed = true; + touch_state->touch_pressed = true; } void EmuWindow::TouchReleased() { - touch_pressed = false; - touch_x = 0; - touch_y = 0; + std::lock_guard guard(touch_state->mutex); + touch_state->touch_pressed = false; + touch_state->touch_x = 0; + touch_state->touch_y = 0; } void EmuWindow::TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y) { - if (!touch_pressed) + if (!touch_state->touch_pressed) return; if (!IsWithinTouchscreen(framebuffer_layout, framebuffer_x, framebuffer_y)) diff --git a/src/core/frontend/emu_window.h b/src/core/frontend/emu_window.h index 7bdee251c2..c10dee51ba 100644 --- a/src/core/frontend/emu_window.h +++ b/src/core/frontend/emu_window.h @@ -4,11 +4,10 @@ #pragma once -#include +#include #include #include #include "common/common_types.h" -#include "common/math_util.h" #include "core/frontend/framebuffer_layout.h" /** @@ -68,17 +67,6 @@ public: */ void TouchMoved(unsigned framebuffer_x, unsigned framebuffer_y); - /** - * Gets the current touch screen state (touch X/Y coordinates and whether or not it is pressed). - * @note This should be called by the core emu thread to get a state set by the window thread. - * @todo Fix this function to be thread-safe. - * @return std::tuple of (x, y, pressed) where `x` and `y` are the touch coordinates and - * `pressed` is true if the touch screen is currently being pressed - */ - std::tuple GetTouchState() const { - return std::make_tuple(touch_x, touch_y, touch_pressed); - } - /** * Returns currently active configuration. * @note Accesses to the returned object need not be consistent because it may be modified in @@ -113,15 +101,8 @@ public: void UpdateCurrentFramebufferLayout(unsigned width, unsigned height); protected: - EmuWindow() { - // TODO: Find a better place to set this. - config.min_client_area_size = std::make_pair(400u, 480u); - active_config = config; - touch_x = 0; - touch_y = 0; - touch_pressed = false; - } - virtual ~EmuWindow() {} + EmuWindow(); + virtual ~EmuWindow(); /** * Processes any pending configuration changes from the last SetConfig call. @@ -177,10 +158,8 @@ private: /// ProcessConfigurationChanges) WindowConfig active_config; ///< Internal active configuration - bool touch_pressed; ///< True if touchpad area is currently pressed, otherwise false - - u16 touch_x; ///< Touchpad X-position in native 3DS pixel coordinates (0-320) - u16 touch_y; ///< Touchpad Y-position in native 3DS pixel coordinates (0-240) + class TouchState; + std::shared_ptr touch_state; /** * Clip the provided coordinates to be inside the touchscreen area. From ea51a3af261254e5455f63a0ef41e55ef1dfc471 Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 22 Aug 2017 09:49:26 +0300 Subject: [PATCH 101/195] SwRasterizer: implement custom clip plane --- src/video_core/regs_rasterizer.h | 14 ++++++++++++-- src/video_core/swrasterizer/clipper.cpp | 15 +++++++++++++-- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/video_core/regs_rasterizer.h b/src/video_core/regs_rasterizer.h index 2874fd1272..4fef00d763 100644 --- a/src/video_core/regs_rasterizer.h +++ b/src/video_core/regs_rasterizer.h @@ -5,10 +5,10 @@ #pragma once #include - #include "common/bit_field.h" #include "common/common_funcs.h" #include "common/common_types.h" +#include "video_core/pica_types.h" namespace Pica { @@ -31,7 +31,17 @@ struct RasterizerRegs { BitField<0, 24, u32> viewport_size_y; - INSERT_PADDING_WORDS(0x9); + INSERT_PADDING_WORDS(0x3); + + BitField<0, 1, u32> clip_enable; + BitField<0, 24, u32> clip_coef[4]; // float24 + + Math::Vec4 GetClipCoef() const { + return {float24::FromRaw(clip_coef[0]), float24::FromRaw(clip_coef[1]), + float24::FromRaw(clip_coef[2]), float24::FromRaw(clip_coef[3])}; + } + + INSERT_PADDING_WORDS(0x1); BitField<0, 24, u32> viewport_depth_range; // float24 BitField<0, 24, u32> viewport_depth_near_plane; // float24 diff --git a/src/video_core/swrasterizer/clipper.cpp b/src/video_core/swrasterizer/clipper.cpp index cdbc715026..cc76ba5555 100644 --- a/src/video_core/swrasterizer/clipper.cpp +++ b/src/video_core/swrasterizer/clipper.cpp @@ -127,8 +127,7 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu // Simple implementation of the Sutherland-Hodgman clipping algorithm. // TODO: Make this less inefficient (currently lots of useless buffering overhead happens here) - for (auto edge : clipping_edges) { - + auto Clip = [&](const ClippingEdge& edge) { std::swap(input_list, output_list); output_list->clear(); @@ -147,12 +146,24 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu } reference_vertex = &vertex; } + }; + + for (auto edge : clipping_edges) { + Clip(edge); // Need to have at least a full triangle to continue... if (output_list->size() < 3) return; } + if (g_state.regs.rasterizer.clip_enable) { + ClippingEdge custom_edge{-g_state.regs.rasterizer.GetClipCoef()}; + Clip(custom_edge); + + if (output_list->size() < 3) + return; + } + InitScreenCoordinates((*output_list)[0]); InitScreenCoordinates((*output_list)[1]); From addbcd5784c8195f49cecc20834537c80d1c8c72 Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 22 Aug 2017 09:49:53 +0300 Subject: [PATCH 102/195] gl_rasterizer: implement custom clip plane --- .../renderer_opengl/gl_rasterizer.cpp | 28 +++++++ .../renderer_opengl/gl_rasterizer.h | 9 ++- .../renderer_opengl/gl_shader_gen.cpp | 80 +++++++++++-------- 3 files changed, 83 insertions(+), 34 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index aa95ef21da..7b0cd1b667 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -169,6 +169,8 @@ RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) { glTexBuffer(GL_TEXTURE_BUFFER, GL_RGBA32F, proctex_diff_lut_buffer.handle); // Sync fixed function OpenGL state + SyncClipEnabled(); + SyncClipCoef(); SyncCullMode(); SyncBlendEnabled(); SyncBlendFuncs(); @@ -401,6 +403,18 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) { SyncCullMode(); break; + // Clipping plane + case PICA_REG_INDEX(rasterizer.clip_enable): + SyncClipEnabled(); + break; + + case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[0], 0x48): + case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[1], 0x49): + case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[2], 0x4a): + case PICA_REG_INDEX_WORKAROUND(rasterizer.clip_coef[3], 0x4b): + SyncClipCoef(); + break; + // Depth modifiers case PICA_REG_INDEX(rasterizer.viewport_depth_range): SyncDepthScale(); @@ -1280,6 +1294,20 @@ void RasterizerOpenGL::SetShader() { } } +void RasterizerOpenGL::SyncClipEnabled() { + state.clip_distance[1] = Pica::g_state.regs.rasterizer.clip_enable != 0; +} + +void RasterizerOpenGL::SyncClipCoef() { + const auto raw_clip_coef = Pica::g_state.regs.rasterizer.GetClipCoef(); + const GLvec4 new_clip_coef = {raw_clip_coef.x.ToFloat32(), raw_clip_coef.y.ToFloat32(), + raw_clip_coef.z.ToFloat32(), raw_clip_coef.w.ToFloat32()}; + if (new_clip_coef != uniform_block_data.data.clip_coef) { + uniform_block_data.data.clip_coef = new_clip_coef; + uniform_block_data.dirty = true; + } +} + void RasterizerOpenGL::SyncCullMode() { const auto& regs = Pica::g_state.regs; diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 78e218efe1..46c62961c3 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h @@ -151,14 +151,21 @@ private: LightSrc light_src[8]; alignas(16) GLvec4 const_color[6]; // A vec4 color for each of the six tev stages alignas(16) GLvec4 tev_combiner_buffer_color; + alignas(16) GLvec4 clip_coef; }; static_assert( - sizeof(UniformData) == 0x460, + sizeof(UniformData) == 0x470, "The size of the UniformData structure has changed, update the structure in the shader"); static_assert(sizeof(UniformData) < 16384, "UniformData structure must be less than 16kb as per the OpenGL spec"); + /// Syncs the clip enabled status to match the PICA register + void SyncClipEnabled(); + + /// Syncs the clip coefficients to match the PICA register + void SyncClipCoef(); + /// Sets the OpenGL shader in accordance with the current PICA register state void SetShader(); diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index 015e69da97..aa60b2e7f2 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -24,6 +24,42 @@ using TevStageConfig = TexturingRegs::TevStageConfig; namespace GLShader { +static const std::string UniformBlockDef = R"( +#define NUM_TEV_STAGES 6 +#define NUM_LIGHTS 8 + +struct LightSrc { + vec3 specular_0; + vec3 specular_1; + vec3 diffuse; + vec3 ambient; + vec3 position; + vec3 spot_direction; + float dist_atten_bias; + float dist_atten_scale; +}; + +layout (std140) uniform shader_data { + vec2 framebuffer_scale; + int alphatest_ref; + float depth_scale; + float depth_offset; + int scissor_x1; + int scissor_y1; + int scissor_x2; + int scissor_y2; + vec3 fog_color; + vec2 proctex_noise_f; + vec2 proctex_noise_a; + vec2 proctex_noise_p; + vec3 lighting_global_ambient; + LightSrc light_src[NUM_LIGHTS]; + vec4 const_color[NUM_TEV_STAGES]; + vec4 tev_combiner_buffer_color; + vec4 clip_coef; +}; +)"; + PicaShaderConfig PicaShaderConfig::BuildFromRegs(const Pica::Regs& regs) { PicaShaderConfig res; @@ -1008,8 +1044,6 @@ std::string GenerateFragmentShader(const PicaShaderConfig& config) { std::string out = R"( #version 330 core -#define NUM_TEV_STAGES 6 -#define NUM_LIGHTS 8 in vec4 primary_color; in vec2 texcoord[3]; @@ -1021,36 +1055,6 @@ in vec4 gl_FragCoord; out vec4 color; -struct LightSrc { - vec3 specular_0; - vec3 specular_1; - vec3 diffuse; - vec3 ambient; - vec3 position; - vec3 spot_direction; - float dist_atten_bias; - float dist_atten_scale; -}; - -layout (std140) uniform shader_data { - vec2 framebuffer_scale; - int alphatest_ref; - float depth_scale; - float depth_offset; - int scissor_x1; - int scissor_y1; - int scissor_x2; - int scissor_y2; - vec3 fog_color; - vec2 proctex_noise_f; - vec2 proctex_noise_a; - vec2 proctex_noise_p; - vec3 lighting_global_ambient; - LightSrc light_src[NUM_LIGHTS]; - vec4 const_color[NUM_TEV_STAGES]; - vec4 tev_combiner_buffer_color; -}; - uniform sampler2D tex[3]; uniform samplerBuffer lighting_lut; uniform samplerBuffer fog_lut; @@ -1059,7 +1063,11 @@ uniform samplerBuffer proctex_color_map; uniform samplerBuffer proctex_alpha_map; uniform samplerBuffer proctex_lut; uniform samplerBuffer proctex_diff_lut; +)"; + out += UniformBlockDef; + + out += R"( // Rotate the vector v by the quaternion q vec3 quaternion_rotate(vec4 q, vec3 v) { return v + 2.0 * cross(q.xyz, cross(q.xyz, v) + q.w * v); @@ -1190,6 +1198,12 @@ out float texcoord0_w; out vec4 normquat; out vec3 view; +)"; + + out += UniformBlockDef; + + out += R"( + void main() { primary_color = vert_color; texcoord[0] = vert_texcoord0; @@ -1200,7 +1214,7 @@ void main() { view = vert_view; gl_Position = vert_position; gl_ClipDistance[0] = -vert_position.z; // fixed PICA clipping plane z <= 0 - // TODO (wwylele): calculate gl_ClipDistance[1] from user-defined clipping plane + gl_ClipDistance[1] = dot(clip_coef, vert_position); } )"; From 417cb45e3fc20a7529ce5d548ba0fbc36ea0a621 Mon Sep 17 00:00:00 2001 From: wwylele Date: Tue, 22 Aug 2017 09:47:15 +0300 Subject: [PATCH 103/195] SwRasterizer/Clipper: flip the sign convention to match PICA and OpenGL --- src/video_core/swrasterizer/clipper.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/video_core/swrasterizer/clipper.cpp b/src/video_core/swrasterizer/clipper.cpp index cc76ba5555..a52129eb76 100644 --- a/src/video_core/swrasterizer/clipper.cpp +++ b/src/video_core/swrasterizer/clipper.cpp @@ -31,7 +31,7 @@ public: : coeffs(coeffs), bias(bias) {} bool IsInside(const Vertex& vertex) const { - return Math::Dot(vertex.pos + bias, coeffs) <= float24::FromFloat32(0); + return Math::Dot(vertex.pos + bias, coeffs) >= float24::FromFloat32(0); } bool IsOutSide(const Vertex& vertex) const { @@ -116,13 +116,13 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu static const float24 f0 = float24::FromFloat32(0.0); static const float24 f1 = float24::FromFloat32(1.0); static const std::array clipping_edges = {{ - {Math::MakeVec(f1, f0, f0, -f1)}, // x = +w - {Math::MakeVec(-f1, f0, f0, -f1)}, // x = -w - {Math::MakeVec(f0, f1, f0, -f1)}, // y = +w - {Math::MakeVec(f0, -f1, f0, -f1)}, // y = -w - {Math::MakeVec(f0, f0, f1, f0)}, // z = 0 - {Math::MakeVec(f0, f0, -f1, -f1)}, // z = -w - {Math::MakeVec(f0, f0, f0, -f1), Math::Vec4(f0, f0, f0, EPSILON)}, // w = EPSILON + {Math::MakeVec(-f1, f0, f0, f1)}, // x = +w + {Math::MakeVec(f1, f0, f0, f1)}, // x = -w + {Math::MakeVec(f0, -f1, f0, f1)}, // y = +w + {Math::MakeVec(f0, f1, f0, f1)}, // y = -w + {Math::MakeVec(f0, f0, -f1, f0)}, // z = 0 + {Math::MakeVec(f0, f0, f1, f1)}, // z = -w + {Math::MakeVec(f0, f0, f0, f1), Math::Vec4(f0, f0, f0, EPSILON)}, // w = EPSILON }}; // Simple implementation of the Sutherland-Hodgman clipping algorithm. @@ -157,7 +157,7 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu } if (g_state.regs.rasterizer.clip_enable) { - ClippingEdge custom_edge{-g_state.regs.rasterizer.GetClipCoef()}; + ClippingEdge custom_edge{g_state.regs.rasterizer.GetClipCoef()}; Clip(custom_edge); if (output_list->size() < 3) From 3cdf854e44e7ff088fa0cbdcfa2bcc6e41822b2c Mon Sep 17 00:00:00 2001 From: ThaMighty90 <30285364+ThaMighty90@users.noreply.github.com> Date: Fri, 25 Aug 2017 23:53:07 +0200 Subject: [PATCH 104/195] SidebySide Layout (#2859) * added a SidebySide Layout * Reworked, so both screen have the same height and cleaned up screen translates. * added the option in the UI, hope this is the right way to do it. formated framebuffer_layout.cpp * delete the x64 files * deleted ui_configure_graphics.h * added Option for the Layout in the xml * got rid of SIDE_BY_SIDE_ASPECT_RATIO because it was useless. pulled translate into variables * changed shift variables to u32 and moved them in their respective branch. remove notr="true" for the Screen layout drop down * reworked intends :). changed function description for SideFrameLayout * some description reworking --- .../configuration/configure_graphics.ui | 11 ++++-- src/core/frontend/emu_window.cpp | 3 ++ src/core/frontend/framebuffer_layout.cpp | 36 ++++++++++++++++++- src/core/frontend/framebuffer_layout.h | 11 ++++++ src/core/settings.cpp | 2 +- src/core/settings.h | 5 +-- 6 files changed, 61 insertions(+), 7 deletions(-) diff --git a/src/citra_qt/configuration/configure_graphics.ui b/src/citra_qt/configuration/configure_graphics.ui index 228f2a8695..b340149d52 100644 --- a/src/citra_qt/configuration/configure_graphics.ui +++ b/src/citra_qt/configuration/configure_graphics.ui @@ -146,17 +146,22 @@ - Default + Default - Single Screen + Single Screen - Large Screen + Large Screen + + + + + Side by Side diff --git a/src/core/frontend/emu_window.cpp b/src/core/frontend/emu_window.cpp index 60b20d4e2c..54fa5c7fa7 100644 --- a/src/core/frontend/emu_window.cpp +++ b/src/core/frontend/emu_window.cpp @@ -74,6 +74,9 @@ void EmuWindow::UpdateCurrentFramebufferLayout(unsigned width, unsigned height) case Settings::LayoutOption::LargeScreen: layout = Layout::LargeFrameLayout(width, height, Settings::values.swap_screen); break; + case Settings::LayoutOption::SideScreen: + layout = Layout::SideFrameLayout(width, height, Settings::values.swap_screen); + break; case Settings::LayoutOption::Default: default: layout = Layout::DefaultFrameLayout(width, height, Settings::values.swap_screen); diff --git a/src/core/frontend/framebuffer_layout.cpp b/src/core/frontend/framebuffer_layout.cpp index d2d02f9ff4..e9f778fcb6 100644 --- a/src/core/frontend/framebuffer_layout.cpp +++ b/src/core/frontend/framebuffer_layout.cpp @@ -141,6 +141,40 @@ FramebufferLayout LargeFrameLayout(unsigned width, unsigned height, bool swapped return res; } +FramebufferLayout SideFrameLayout(unsigned width, unsigned height, bool swapped) { + ASSERT(width > 0); + ASSERT(height > 0); + + FramebufferLayout res{width, height, true, true, {}, {}}; + // Aspect ratio of both screens side by side + const float emulation_aspect_ratio = static_cast(Core::kScreenTopHeight) / + (Core::kScreenTopWidth + Core::kScreenBottomWidth); + float window_aspect_ratio = static_cast(height) / width; + MathUtil::Rectangle screen_window_area{0, 0, width, height}; + // Find largest Rectangle that can fit in the window size with the given aspect ratio + MathUtil::Rectangle screen_rect = + maxRectangle(screen_window_area, emulation_aspect_ratio); + // Find sizes of top and bottom screen + MathUtil::Rectangle top_screen = maxRectangle(screen_rect, TOP_SCREEN_ASPECT_RATIO); + MathUtil::Rectangle bot_screen = maxRectangle(screen_rect, BOT_SCREEN_ASPECT_RATIO); + + if (window_aspect_ratio < emulation_aspect_ratio) { + // Apply borders to the left and right sides of the window. + u32 shift_horizontal = (screen_window_area.GetWidth() - screen_rect.GetWidth()) / 2; + top_screen = top_screen.TranslateX(shift_horizontal); + bot_screen = bot_screen.TranslateX(shift_horizontal); + } else { + // Window is narrower than the emulation content => apply borders to the top and bottom + u32 shift_vertical = (screen_window_area.GetHeight() - screen_rect.GetHeight()) / 2; + top_screen = top_screen.TranslateY(shift_vertical); + bot_screen = bot_screen.TranslateY(shift_vertical); + } + // Move the top screen to the right if we are swapped. + res.top_screen = swapped ? top_screen.TranslateX(bot_screen.GetWidth()) : top_screen; + res.bottom_screen = swapped ? bot_screen : bot_screen.TranslateX(top_screen.GetWidth()); + return res; +} + FramebufferLayout CustomFrameLayout(unsigned width, unsigned height) { ASSERT(width > 0); ASSERT(height > 0); @@ -158,4 +192,4 @@ FramebufferLayout CustomFrameLayout(unsigned width, unsigned height) { res.bottom_screen = bot_screen; return res; } -} +} // namespace Layout diff --git a/src/core/frontend/framebuffer_layout.h b/src/core/frontend/framebuffer_layout.h index 9a7738969b..4983cf103d 100644 --- a/src/core/frontend/framebuffer_layout.h +++ b/src/core/frontend/framebuffer_layout.h @@ -53,6 +53,17 @@ FramebufferLayout SingleFrameLayout(unsigned width, unsigned height, bool is_swa */ FramebufferLayout LargeFrameLayout(unsigned width, unsigned height, bool is_swapped); +/** +* Factory method for constructing a Frame with the Top screen and bottom +* screen side by side +* This is useful for devices with small screens, like the GPDWin +* @param width Window framebuffer width in pixels +* @param height Window framebuffer height in pixels +* @param is_swapped if true, the bottom screen will be the left display +* @return Newly created FramebufferLayout object with default screen regions initialized +*/ +FramebufferLayout SideFrameLayout(unsigned width, unsigned height, bool is_swapped); + /** * Factory method for constructing a custom FramebufferLayout * @param width Window framebuffer width in pixels diff --git a/src/core/settings.cpp b/src/core/settings.cpp index d4f0429d14..efcf1267d0 100644 --- a/src/core/settings.cpp +++ b/src/core/settings.cpp @@ -36,4 +36,4 @@ void Apply() { Service::IR::ReloadInputDevices(); } -} // namespace +} // namespace Settings diff --git a/src/core/settings.h b/src/core/settings.h index 7e15b119b7..ca657719aa 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -15,6 +15,7 @@ enum class LayoutOption { Default, SingleScreen, LargeScreen, + SideScreen, }; namespace NativeButton { @@ -70,7 +71,7 @@ enum Values { static const std::array mapping = {{ "circle_pad", "c_stick", }}; -} // namespace NumAnalog +} // namespace NativeAnalog struct Values { // CheckNew3DS @@ -137,4 +138,4 @@ struct Values { static constexpr int REGION_VALUE_AUTO_SELECT = -1; void Apply(); -} +} // namespace Settings From 59ad93302226f3e65aed1a62ea3c7b58315d0eb6 Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 8 Aug 2017 20:06:25 -0400 Subject: [PATCH 105/195] citra_qt: Show one-time callout messages to user. --- src/citra_qt/configuration/config.cpp | 2 ++ src/citra_qt/main.cpp | 44 +++++++++++++++++++++++++++ src/citra_qt/main.h | 2 ++ src/citra_qt/ui_settings.h | 2 ++ 4 files changed, 50 insertions(+) diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index 6e42db0072..7386814b3c 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -194,6 +194,7 @@ void Config::ReadValues() { UISettings::values.show_status_bar = qt_config->value("showStatusBar", true).toBool(); UISettings::values.confirm_before_closing = qt_config->value("confirmClose", true).toBool(); UISettings::values.first_start = qt_config->value("firstStart", true).toBool(); + UISettings::values.callout_flags = qt_config->value("calloutFlags", 0).toUInt(); qt_config->endGroup(); } @@ -320,6 +321,7 @@ void Config::SaveValues() { qt_config->setValue("showStatusBar", UISettings::values.show_status_bar); qt_config->setValue("confirmClose", UISettings::values.confirm_before_closing); qt_config->setValue("firstStart", UISettings::values.first_start); + qt_config->setValue("calloutFlags", UISettings::values.callout_flags); qt_config->endGroup(); } diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index c1ae0ccc89..a8bf6201aa 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -48,6 +48,47 @@ Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin); #endif +/** + * "Callouts" are one-time instructional messages shown to the user. In the config settings, there + * is a bitfield "callout_flags" options, used to track if a message has already been shown to the + * user. This is 32-bits - if we have more than 32 callouts, we should retire and recyle old ones. + */ +enum class CalloutFlag : uint32_t { + Telemetry = 0x1, +}; + +static void ShowCalloutMessage(const QString& message, CalloutFlag flag) { + if (UISettings::values.callout_flags & static_cast(flag)) { + return; + } + + UISettings::values.callout_flags |= static_cast(flag); + + QMessageBox msg; + msg.setText(message); + msg.setStandardButtons(QMessageBox::Ok); + msg.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + msg.setStyleSheet("QLabel{min-width: 900px;}"); + msg.exec(); +} + +void GMainWindow::ShowCallouts() { + static const QString telemetry_message = + tr("To help improve Citra, the Citra Team collects anonymous usage data. No private or " + "personally identifying information is collected. This data helps us to understand how " + "people use Citra and prioritize our efforts. Furthermore, it helps us to more easily " + "identify emulation bugs and performance issues. This data includes:

By default, this " + "feature is enabled. To disable this feature, click 'Emulation' from the menu and then " + "select 'Configure...'. Then, on the 'Web' tab, uncheck 'Share anonymous usage data with" + " the Citra team'.

By using this software, you agree to the above terms.
" + "
Learn " + "more"); + ShowCalloutMessage(telemetry_message, CalloutFlag::Telemetry); +} + GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { Pica::g_debug_context = Pica::DebugContext::Construct(); setAcceptDrops(true); @@ -73,6 +114,9 @@ GMainWindow::GMainWindow() : config(new Config()), emu_thread(nullptr) { UpdateUITheme(); + // Show one-time "callout" messages to the user + ShowCallouts(); + QStringList args = QApplication::arguments(); if (args.length() >= 2) { BootGame(args[1]); diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h index 360de2ced2..d59a6d67d3 100644 --- a/src/citra_qt/main.h +++ b/src/citra_qt/main.h @@ -80,6 +80,8 @@ private: void BootGame(const QString& filename); void ShutdownGame(); + void ShowCallouts(); + /** * Stores the filename in the recently loaded files list. * The new filename is stored at the beginning of the recently loaded files list. diff --git a/src/citra_qt/ui_settings.h b/src/citra_qt/ui_settings.h index 025c73f84b..d85c92765f 100644 --- a/src/citra_qt/ui_settings.h +++ b/src/citra_qt/ui_settings.h @@ -48,6 +48,8 @@ struct Values { // Shortcut name std::vector shortcuts; + + uint32_t callout_flags; }; extern Values values; From d6a819c7cb1ac00671b7e76b23d7d065d1fd76a3 Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 22 Aug 2017 20:58:19 -0400 Subject: [PATCH 106/195] telemetry_session: Log telemetry ID. --- src/core/telemetry_session.cpp | 36 ++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index 94483f3852..61ba78457a 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp @@ -3,8 +3,10 @@ // Refer to the license.txt file included. #include +#include #include "common/assert.h" +#include "common/file_util.h" #include "common/scm_rev.h" #include "common/x64/cpu_detect.h" #include "core/core.h" @@ -29,12 +31,46 @@ static const char* CpuVendorToStr(Common::CPUVendor vendor) { UNREACHABLE(); } +static u64 GenerateTelemetryId() { + u64 telemetry_id{}; + CryptoPP::AutoSeededRandomPool rng; + rng.GenerateBlock(reinterpret_cast(&telemetry_id), sizeof(u64)); + return telemetry_id; +} + +static u64 GetTelemetryId() { + u64 telemetry_id{}; + static const std::string& filename{FileUtil::GetUserPath(D_CONFIG_IDX) + "telemetry_id"}; + + if (FileUtil::Exists(filename)) { + FileUtil::IOFile file(filename, "rb"); + if (!file.IsOpen()) { + LOG_ERROR(WebService, "failed to open telemetry_id: %s", filename.c_str()); + return {}; + } + file.ReadBytes(&telemetry_id, sizeof(u64)); + } else { + FileUtil::IOFile file(filename, "wb"); + if (!file.IsOpen()) { + LOG_ERROR(WebService, "failed to open telemetry_id: %s", filename.c_str()); + return {}; + } + telemetry_id = GenerateTelemetryId(); + file.WriteBytes(&telemetry_id, sizeof(u64)); + } + + return telemetry_id; +} + TelemetrySession::TelemetrySession() { #ifdef ENABLE_WEB_SERVICE backend = std::make_unique(); #else backend = std::make_unique(); #endif + // Log one-time top-level information + AddField(Telemetry::FieldType::None, "TelemetryId", GetTelemetryId()); + // Log one-time session start information const s64 init_time{std::chrono::duration_cast( std::chrono::system_clock::now().time_since_epoch()) From c781aea947e275a970a3431a36160b769865993d Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 22 Aug 2017 22:37:03 -0400 Subject: [PATCH 107/195] settings: Add enable_telemetry, citra_username, and citra_token. --- src/citra/config.cpp | 4 ++++ src/citra/default_ini.h | 7 +++++++ src/citra_qt/configuration/config.cpp | 6 ++++++ src/core/settings.h | 3 +++ 4 files changed, 20 insertions(+) diff --git a/src/citra/config.cpp b/src/citra/config.cpp index 73846ed915..3869b6b5d5 100644 --- a/src/citra/config.cpp +++ b/src/citra/config.cpp @@ -156,8 +156,12 @@ void Config::ReadValues() { static_cast(sdl2_config->GetInteger("Debugging", "gdbstub_port", 24689)); // Web Service + Settings::values.enable_telemetry = + sdl2_config->GetBoolean("WebService", "enable_telemetry", true); Settings::values.telemetry_endpoint_url = sdl2_config->Get( "WebService", "telemetry_endpoint_url", "https://services.citra-emu.org/api/telemetry"); + Settings::values.citra_username = sdl2_config->Get("WebService", "citra_username", ""); + Settings::values.citra_token = sdl2_config->Get("WebService", "citra_token", ""); } void Config::Reload() { diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h index 9ea779dd84..666a2ad70e 100644 --- a/src/citra/default_ini.h +++ b/src/citra/default_ini.h @@ -176,7 +176,14 @@ use_gdbstub=false gdbstub_port=24689 [WebService] +# Whether or not to enable telemetry +# 0: No, 1 (default): Yes +enable_telemetry = # Endpoint URL for submitting telemetry data telemetry_endpoint_url = +# Username and token for Citra Web Service +# See https://services.citra-emu.org/ for more info +citra_username = +citra_token = )"; } diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index 7386814b3c..e2dceaa4c6 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -139,10 +139,13 @@ void Config::ReadValues() { qt_config->endGroup(); qt_config->beginGroup("WebService"); + Settings::values.enable_telemetry = qt_config->value("enable_telemetry", true).toBool(); Settings::values.telemetry_endpoint_url = qt_config->value("telemetry_endpoint_url", "https://services.citra-emu.org/api/telemetry") .toString() .toStdString(); + Settings::values.citra_username = qt_config->value("citra_username").toString().toStdString(); + Settings::values.citra_token = qt_config->value("citra_token").toString().toStdString(); qt_config->endGroup(); qt_config->beginGroup("UI"); @@ -284,8 +287,11 @@ void Config::SaveValues() { qt_config->endGroup(); qt_config->beginGroup("WebService"); + qt_config->setValue("enable_telemetry", Settings::values.enable_telemetry); qt_config->setValue("telemetry_endpoint_url", QString::fromStdString(Settings::values.telemetry_endpoint_url)); + qt_config->setValue("citra_username", QString::fromStdString(Settings::values.citra_username)); + qt_config->setValue("citra_token", QString::fromStdString(Settings::values.citra_token)); qt_config->endGroup(); qt_config->beginGroup("UI"); diff --git a/src/core/settings.h b/src/core/settings.h index ca657719aa..bf8014c5a7 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -130,7 +130,10 @@ struct Values { u16 gdbstub_port; // WebService + bool enable_telemetry; std::string telemetry_endpoint_url; + std::string citra_username; + std::string citra_token; } extern values; // a special value for Values::region_value indicating that citra will automatically select a region From 40f417125b799fde86f00824633d1ef86be73c6a Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 22 Aug 2017 22:47:56 -0400 Subject: [PATCH 108/195] telemetry: Log frontend type. --- src/citra/citra.cpp | 2 ++ src/citra_qt/main.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/citra/citra.cpp b/src/citra/citra.cpp index 14574e56c1..e524c55356 100644 --- a/src/citra/citra.cpp +++ b/src/citra/citra.cpp @@ -165,6 +165,8 @@ int main(int argc, char** argv) { break; // Expected case } + Core::Telemetry().AddField(Telemetry::FieldType::App, "Frontend", "SDL"); + while (emu_window->IsOpen()) { system.RunLoop(); } diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index a8bf6201aa..8adbcfe865 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -364,6 +364,8 @@ bool GMainWindow::LoadROM(const QString& filename) { const Core::System::ResultStatus result{system.Load(render_window, filename.toStdString())}; + Core::Telemetry().AddField(Telemetry::FieldType::App, "Frontend", "Qt"); + if (result != Core::System::ResultStatus::Success) { switch (result) { case Core::System::ResultStatus::ErrorGetLoader: From 41328afb5852230e1f7c486c4ca20fbc9354a7f8 Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 22 Aug 2017 23:06:56 -0400 Subject: [PATCH 109/195] web_backend: User config for username and token, support anonymous post. --- src/web_service/web_backend.cpp | 47 +++++++++++++-------------------- src/web_service/web_backend.h | 12 --------- 2 files changed, 18 insertions(+), 41 deletions(-) diff --git a/src/web_service/web_backend.cpp b/src/web_service/web_backend.cpp index 13e4555acd..96ddf6c3c2 100644 --- a/src/web_service/web_backend.cpp +++ b/src/web_service/web_backend.cpp @@ -5,48 +5,37 @@ #include #include #include "common/logging/log.h" +#include "core/settings.h" #include "web_service/web_backend.h" namespace WebService { static constexpr char API_VERSION[]{"1"}; -static constexpr char ENV_VAR_USERNAME[]{"CITRA_WEB_SERVICES_USERNAME"}; -static constexpr char ENV_VAR_TOKEN[]{"CITRA_WEB_SERVICES_TOKEN"}; - -static std::string GetEnvironmentVariable(const char* name) { - const char* value{getenv(name)}; - if (value) { - return value; - } - return {}; -} - -const std::string& GetUsername() { - static const std::string username{GetEnvironmentVariable(ENV_VAR_USERNAME)}; - return username; -} - -const std::string& GetToken() { - static const std::string token{GetEnvironmentVariable(ENV_VAR_TOKEN)}; - return token; -} void PostJson(const std::string& url, const std::string& data) { + if (!Settings::values.enable_telemetry) { + // Telemetry disabled by user configuration + return; + } + if (url.empty()) { LOG_ERROR(WebService, "URL is invalid"); return; } - if (GetUsername().empty() || GetToken().empty()) { - LOG_ERROR(WebService, "Environment variables %s and %s must be set to POST JSON", - ENV_VAR_USERNAME, ENV_VAR_TOKEN); - return; + if (Settings::values.citra_token.empty() || Settings::values.citra_username.empty()) { + // Anonymous request if citra token or username are empty + cpr::PostAsync( + cpr::Url{url}, cpr::Body{data}, + cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}}); + } else { + // We have both, do an authenticated request + cpr::PostAsync(cpr::Url{url}, cpr::Body{data}, + cpr::Header{{"Content-Type", "application/json"}, + {"x-username", Settings::values.citra_username}, + {"x-token", Settings::values.citra_token}, + {"api-version", API_VERSION}}); } - - cpr::PostAsync(cpr::Url{url}, cpr::Body{data}, cpr::Header{{"Content-Type", "application/json"}, - {"x-username", GetUsername()}, - {"x-token", GetToken()}, - {"api-version", API_VERSION}}); } } // namespace WebService diff --git a/src/web_service/web_backend.h b/src/web_service/web_backend.h index 2753d3b68e..08e3848693 100644 --- a/src/web_service/web_backend.h +++ b/src/web_service/web_backend.h @@ -9,18 +9,6 @@ namespace WebService { -/** - * Gets the current username for accessing services.citra-emu.org. - * @returns Username as a string, empty if not set. - */ -const std::string& GetUsername(); - -/** - * Gets the current token for accessing services.citra-emu.org. - * @returns Token as a string, empty if not set. - */ -const std::string& GetToken(); - /** * Posts JSON to services.citra-emu.org. * @param url URL of the services.citra-emu.org endpoint to post data to. From fb17e866aa58db05d4d16ba861b1150e6187592e Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 22 Aug 2017 23:36:57 -0400 Subject: [PATCH 110/195] qt: Add web configuration tab. --- src/citra_qt/CMakeLists.txt | 3 + src/citra_qt/configuration/configure.ui | 15 ++- .../configuration/configure_dialog.cpp | 1 + src/citra_qt/configuration/configure_web.cpp | 44 ++++++ src/citra_qt/configuration/configure_web.h | 30 +++++ src/citra_qt/configuration/configure_web.ui | 126 ++++++++++++++++++ 6 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 src/citra_qt/configuration/configure_web.cpp create mode 100644 src/citra_qt/configuration/configure_web.h create mode 100644 src/citra_qt/configuration/configure_web.ui diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt index f364b22843..e0a19fd9e7 100644 --- a/src/citra_qt/CMakeLists.txt +++ b/src/citra_qt/CMakeLists.txt @@ -12,6 +12,7 @@ set(SRCS configuration/configure_graphics.cpp configuration/configure_input.cpp configuration/configure_system.cpp + configuration/configure_web.cpp debugger/graphics/graphics.cpp debugger/graphics/graphics_breakpoint_observer.cpp debugger/graphics/graphics_breakpoints.cpp @@ -42,6 +43,7 @@ set(HEADERS configuration/configure_graphics.h configuration/configure_input.h configuration/configure_system.h + configuration/configure_web.h debugger/graphics/graphics.h debugger/graphics/graphics_breakpoint_observer.h debugger/graphics/graphics_breakpoints.h @@ -71,6 +73,7 @@ set(UIS configuration/configure_graphics.ui configuration/configure_input.ui configuration/configure_system.ui + configuration/configure_web.ui debugger/registers.ui hotkeys.ui main.ui diff --git a/src/citra_qt/configuration/configure.ui b/src/citra_qt/configuration/configure.ui index 85e206e427..6abd1917ea 100644 --- a/src/citra_qt/configuration/configure.ui +++ b/src/citra_qt/configuration/configure.ui @@ -6,8 +6,8 @@ 0 0 - 441 - 501 + 740 + 500 @@ -49,6 +49,11 @@ Debug + + + Web + + @@ -97,6 +102,12 @@
configuration/configure_graphics.h
1 + + ConfigureWeb + QWidget +
configuration/configure_web.h
+ 1 +
diff --git a/src/citra_qt/configuration/configure_dialog.cpp b/src/citra_qt/configuration/configure_dialog.cpp index dfc8c03a7a..b87dc0e6c0 100644 --- a/src/citra_qt/configuration/configure_dialog.cpp +++ b/src/citra_qt/configuration/configure_dialog.cpp @@ -23,5 +23,6 @@ void ConfigureDialog::applyConfiguration() { ui->graphicsTab->applyConfiguration(); ui->audioTab->applyConfiguration(); ui->debugTab->applyConfiguration(); + ui->webTab->applyConfiguration(); Settings::Apply(); } diff --git a/src/citra_qt/configuration/configure_web.cpp b/src/citra_qt/configuration/configure_web.cpp new file mode 100644 index 0000000000..fff466aaac --- /dev/null +++ b/src/citra_qt/configuration/configure_web.cpp @@ -0,0 +1,44 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "citra_qt/configuration/configure_web.h" +#include "core/settings.h" +#include "ui_configure_web.h" + +ConfigureWeb::ConfigureWeb(QWidget* parent) + : QWidget(parent), ui(std::make_unique()) { + ui->setupUi(this); + this->setConfiguration(); +} + +ConfigureWeb::~ConfigureWeb() {} + +void ConfigureWeb::setConfiguration() { + ui->web_credentials_disclaimer->setWordWrap(true); + ui->telemetry_learn_more->setOpenExternalLinks(true); + ui->telemetry_learn_more->setText("Learn more"); + + ui->web_signup_link->setOpenExternalLinks(true); + ui->web_signup_link->setText("Sign up"); + ui->web_token_info_link->setOpenExternalLinks(true); + ui->web_token_info_link->setText( + "What is my token?"); + + ui->toggle_telemetry->setChecked(Settings::values.enable_telemetry); + ui->edit_username->setText(QString::fromStdString(Settings::values.citra_username)); + ui->edit_token->setText(QString::fromStdString(Settings::values.citra_token)); + + updateWeb(); +} + +void ConfigureWeb::applyConfiguration() { + Settings::values.enable_telemetry = ui->toggle_telemetry->isChecked(); + Settings::values.citra_username = ui->edit_username->text().toStdString(); + Settings::values.citra_token = ui->edit_token->text().toStdString(); + Settings::Apply(); +} + +void ConfigureWeb::updateWeb() {} diff --git a/src/citra_qt/configuration/configure_web.h b/src/citra_qt/configuration/configure_web.h new file mode 100644 index 0000000000..2c37b8f90c --- /dev/null +++ b/src/citra_qt/configuration/configure_web.h @@ -0,0 +1,30 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include + +namespace Ui { +class ConfigureWeb; +} + +class ConfigureWeb : public QWidget { + Q_OBJECT + +public: + explicit ConfigureWeb(QWidget* parent = nullptr); + ~ConfigureWeb(); + + void applyConfiguration(); + +public slots: + void updateWeb(); + +private: + void setConfiguration(); + + std::unique_ptr ui; +}; diff --git a/src/citra_qt/configuration/configure_web.ui b/src/citra_qt/configuration/configure_web.ui new file mode 100644 index 0000000000..3bb8276fa2 --- /dev/null +++ b/src/citra_qt/configuration/configure_web.ui @@ -0,0 +1,126 @@ + + + ConfigureWeb + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + + Citra Web Service + + + + + + By providing your username and token, you agree to allow Citra to collect additional usage data, which may include user identifying information. + + + + + + + + + Username: + + + + + + + 36 + + + + + + + Token: + + + + + + + 36 + + + QLineEdit::Password + + + + + + + Sign up + + + + + + + What is my token? + + + + + + + + + + + + Telemetry + + + + + + Share anonymous usage data with the Citra team + + + + + + + Learn more + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + From 2e37201c63d5efb8eb39f993b77c11e73bd6a8e7 Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 24 Aug 2017 19:31:17 -0400 Subject: [PATCH 111/195] # This is a combination of 2 commits. # This is the 1st commit message: qt: Add web configuration tab. # The commit message #2 will be skipped: # fixup! qt: Add web configuration tab. --- src/citra_qt/configuration/configure_web.ui | 33 +++++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/citra_qt/configuration/configure_web.ui b/src/citra_qt/configuration/configure_web.ui index 3bb8276fa2..d8d283fad4 100644 --- a/src/citra_qt/configuration/configure_web.ui +++ b/src/citra_qt/configuration/configure_web.ui @@ -17,11 +17,11 @@ - + Citra Web Service - + @@ -30,7 +30,7 @@ - + @@ -101,6 +101,33 @@ + + + + + + Telemetry ID: + + + + + + + + 0 + 0 + + + + Qt::RightToLeft + + + Regenerate + + + + + From 5d7b364a21f9e7c0bed095f83fed397b6e5d0e8d Mon Sep 17 00:00:00 2001 From: bunnei Date: Tue, 22 Aug 2017 23:42:30 -0400 Subject: [PATCH 112/195] default_ini: Use correct telemetry endpoint URL. --- src/citra/default_ini.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h index 666a2ad70e..ea02a788d7 100644 --- a/src/citra/default_ini.h +++ b/src/citra/default_ini.h @@ -180,7 +180,7 @@ gdbstub_port=24689 # 0: No, 1 (default): Yes enable_telemetry = # Endpoint URL for submitting telemetry data -telemetry_endpoint_url = +telemetry_endpoint_url = https://services.citra-emu.org/api/telemetry # Username and token for Citra Web Service # See https://services.citra-emu.org/ for more info citra_username = From 9f0da33c3349df47580d93fcd25346be4d2b94a7 Mon Sep 17 00:00:00 2001 From: bunnei Date: Wed, 23 Aug 2017 00:08:07 -0400 Subject: [PATCH 113/195] qt: Add an option to view/regenerate telemetry ID. --- src/citra_qt/configuration/configure_web.cpp | 14 +++++++++++--- src/citra_qt/configuration/configure_web.h | 2 +- src/core/telemetry_session.cpp | 19 ++++++++++++++++--- src/core/telemetry_session.h | 12 ++++++++++++ 4 files changed, 40 insertions(+), 7 deletions(-) diff --git a/src/citra_qt/configuration/configure_web.cpp b/src/citra_qt/configuration/configure_web.cpp index fff466aaac..8715fb0181 100644 --- a/src/citra_qt/configuration/configure_web.cpp +++ b/src/citra_qt/configuration/configure_web.cpp @@ -4,11 +4,15 @@ #include "citra_qt/configuration/configure_web.h" #include "core/settings.h" +#include "core/telemetry_session.h" #include "ui_configure_web.h" ConfigureWeb::ConfigureWeb(QWidget* parent) : QWidget(parent), ui(std::make_unique()) { ui->setupUi(this); + connect(ui->button_regenerate_telemetry_id, &QPushButton::clicked, this, + &ConfigureWeb::refreshTelemetryID); + this->setConfiguration(); } @@ -30,8 +34,8 @@ void ConfigureWeb::setConfiguration() { ui->toggle_telemetry->setChecked(Settings::values.enable_telemetry); ui->edit_username->setText(QString::fromStdString(Settings::values.citra_username)); ui->edit_token->setText(QString::fromStdString(Settings::values.citra_token)); - - updateWeb(); + ui->label_telemetry_id->setText("Telemetry ID: 0x" + + QString::number(Core::GetTelemetryId(), 16).toUpper()); } void ConfigureWeb::applyConfiguration() { @@ -41,4 +45,8 @@ void ConfigureWeb::applyConfiguration() { Settings::Apply(); } -void ConfigureWeb::updateWeb() {} +void ConfigureWeb::refreshTelemetryID() { + const u64 new_telemetry_id{Core::RegenerateTelemetryId()}; + ui->label_telemetry_id->setText("Telemetry ID: 0x" + + QString::number(new_telemetry_id, 16).toUpper()); +} diff --git a/src/citra_qt/configuration/configure_web.h b/src/citra_qt/configuration/configure_web.h index 2c37b8f90c..20bc254b90 100644 --- a/src/citra_qt/configuration/configure_web.h +++ b/src/citra_qt/configuration/configure_web.h @@ -21,7 +21,7 @@ public: void applyConfiguration(); public slots: - void updateWeb(); + void refreshTelemetryID(); private: void setConfiguration(); diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index 61ba78457a..d0f257f587 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp @@ -38,21 +38,21 @@ static u64 GenerateTelemetryId() { return telemetry_id; } -static u64 GetTelemetryId() { +u64 GetTelemetryId() { u64 telemetry_id{}; static const std::string& filename{FileUtil::GetUserPath(D_CONFIG_IDX) + "telemetry_id"}; if (FileUtil::Exists(filename)) { FileUtil::IOFile file(filename, "rb"); if (!file.IsOpen()) { - LOG_ERROR(WebService, "failed to open telemetry_id: %s", filename.c_str()); + LOG_ERROR(Core, "failed to open telemetry_id: %s", filename.c_str()); return {}; } file.ReadBytes(&telemetry_id, sizeof(u64)); } else { FileUtil::IOFile file(filename, "wb"); if (!file.IsOpen()) { - LOG_ERROR(WebService, "failed to open telemetry_id: %s", filename.c_str()); + LOG_ERROR(Core, "failed to open telemetry_id: %s", filename.c_str()); return {}; } telemetry_id = GenerateTelemetryId(); @@ -62,6 +62,19 @@ static u64 GetTelemetryId() { return telemetry_id; } +u64 RegenerateTelemetryId() { + const u64 new_telemetry_id{GenerateTelemetryId()}; + static const std::string& filename{FileUtil::GetUserPath(D_CONFIG_IDX) + "telemetry_id"}; + + FileUtil::IOFile file(filename, "wb"); + if (!file.IsOpen()) { + LOG_ERROR(Core, "failed to open telemetry_id: %s", filename.c_str()); + return {}; + } + file.WriteBytes(&new_telemetry_id, sizeof(u64)); + return new_telemetry_id; +} + TelemetrySession::TelemetrySession() { #ifdef ENABLE_WEB_SERVICE backend = std::make_unique(); diff --git a/src/core/telemetry_session.h b/src/core/telemetry_session.h index cf53835c3e..65613daae4 100644 --- a/src/core/telemetry_session.h +++ b/src/core/telemetry_session.h @@ -35,4 +35,16 @@ private: std::unique_ptr backend; ///< Backend interface that logs fields }; +/** + * Gets TelemetryId, a unique identifier used for the user's telemetry sessions. + * @returns The current TelemetryId for the session. + */ +u64 GetTelemetryId(); + +/** + * Regenerates TelemetryId, a unique identifier used for the user's telemetry sessions. + * @returns The new TelemetryId that was generated. + */ +u64 RegenerateTelemetryId(); + } // namespace Core From 04bd0c957e583a518121626deb029f214cc98cf6 Mon Sep 17 00:00:00 2001 From: bunnei Date: Wed, 23 Aug 2017 21:09:34 -0400 Subject: [PATCH 114/195] web_services: Refactor to remove dependency on Core. --- src/core/telemetry_session.cpp | 8 +++++++- src/web_service/telemetry_json.cpp | 3 +-- src/web_service/telemetry_json.h | 7 ++++++- src/web_service/web_backend.cpp | 33 +++++++++++++++--------------- src/web_service/web_backend.h | 6 +++++- 5 files changed, 36 insertions(+), 21 deletions(-) diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index d0f257f587..104a16cc9e 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp @@ -77,7 +77,13 @@ u64 RegenerateTelemetryId() { TelemetrySession::TelemetrySession() { #ifdef ENABLE_WEB_SERVICE - backend = std::make_unique(); + if (Settings::values.enable_telemetry) { + backend = std::make_unique( + Settings::values.telemetry_endpoint_url, Settings::values.citra_username, + Settings::values.citra_token); + } else { + backend = std::make_unique(); + } #else backend = std::make_unique(); #endif diff --git a/src/web_service/telemetry_json.cpp b/src/web_service/telemetry_json.cpp index a2d007e779..6ad2ffcd4a 100644 --- a/src/web_service/telemetry_json.cpp +++ b/src/web_service/telemetry_json.cpp @@ -3,7 +3,6 @@ // Refer to the license.txt file included. #include "common/assert.h" -#include "core/settings.h" #include "web_service/telemetry_json.h" #include "web_service/web_backend.h" @@ -81,7 +80,7 @@ void TelemetryJson::Complete() { SerializeSection(Telemetry::FieldType::UserFeedback, "UserFeedback"); SerializeSection(Telemetry::FieldType::UserConfig, "UserConfig"); SerializeSection(Telemetry::FieldType::UserSystem, "UserSystem"); - PostJson(Settings::values.telemetry_endpoint_url, TopSection().dump()); + PostJson(endpoint_url, TopSection().dump(), true, username, token); } } // namespace WebService diff --git a/src/web_service/telemetry_json.h b/src/web_service/telemetry_json.h index 39038b4f9c..9e78c6803b 100644 --- a/src/web_service/telemetry_json.h +++ b/src/web_service/telemetry_json.h @@ -17,7 +17,9 @@ namespace WebService { */ class TelemetryJson : public Telemetry::VisitorInterface { public: - TelemetryJson() = default; + TelemetryJson(const std::string& endpoint_url, const std::string& username, + const std::string& token) + : endpoint_url(endpoint_url), username(username), token(token) {} ~TelemetryJson() = default; void Visit(const Telemetry::Field& field) override; @@ -49,6 +51,9 @@ private: nlohmann::json output; std::array sections; + std::string endpoint_url; + std::string username; + std::string token; }; } // namespace WebService diff --git a/src/web_service/web_backend.cpp b/src/web_service/web_backend.cpp index 96ddf6c3c2..e50c3a301b 100644 --- a/src/web_service/web_backend.cpp +++ b/src/web_service/web_backend.cpp @@ -5,36 +5,37 @@ #include #include #include "common/logging/log.h" -#include "core/settings.h" #include "web_service/web_backend.h" namespace WebService { static constexpr char API_VERSION[]{"1"}; -void PostJson(const std::string& url, const std::string& data) { - if (!Settings::values.enable_telemetry) { - // Telemetry disabled by user configuration - return; - } - +void PostJson(const std::string& url, const std::string& data, bool allow_anonymous, + const std::string& username, const std::string& token) { if (url.empty()) { LOG_ERROR(WebService, "URL is invalid"); return; } - if (Settings::values.citra_token.empty() || Settings::values.citra_username.empty()) { - // Anonymous request if citra token or username are empty + const bool are_credentials_provided{!token.empty() && !username.empty()}; + if (!allow_anonymous && !are_credentials_provided) { + LOG_ERROR(WebService, "Credentials must be provided for authenticated requests"); + return; + } + + if (are_credentials_provided) { + // Authenticated request if credentials are provided + cpr::PostAsync(cpr::Url{url}, cpr::Body{data}, + cpr::Header{{"Content-Type", "application/json"}, + {"x-username", username}, + {"x-token", token}, + {"api-version", API_VERSION}}); + } else { + // Otherwise, anonymous request cpr::PostAsync( cpr::Url{url}, cpr::Body{data}, cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}}); - } else { - // We have both, do an authenticated request - cpr::PostAsync(cpr::Url{url}, cpr::Body{data}, - cpr::Header{{"Content-Type", "application/json"}, - {"x-username", Settings::values.citra_username}, - {"x-token", Settings::values.citra_token}, - {"api-version", API_VERSION}}); } } diff --git a/src/web_service/web_backend.h b/src/web_service/web_backend.h index 08e3848693..d171003986 100644 --- a/src/web_service/web_backend.h +++ b/src/web_service/web_backend.h @@ -13,7 +13,11 @@ namespace WebService { * Posts JSON to services.citra-emu.org. * @param url URL of the services.citra-emu.org endpoint to post data to. * @param data String of JSON data to use for the body of the POST request. + * @param allow_anonymous If true, allow anonymous unauthenticated requests. + * @param username Citra username to use for authentication. + * @param token Citra token to use for authentication. */ -void PostJson(const std::string& url, const std::string& data); +void PostJson(const std::string& url, const std::string& data, bool allow_anonymous, + const std::string& username = {}, const std::string& token = {}); } // namespace WebService From c8562b21d91625333218d69cddff104057273e43 Mon Sep 17 00:00:00 2001 From: bunnei Date: Thu, 24 Aug 2017 19:27:13 -0400 Subject: [PATCH 115/195] web_backend: Fix asynchronous JSON post by spawning new thread. --- src/web_service/web_backend.cpp | 27 ++++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/web_service/web_backend.cpp b/src/web_service/web_backend.cpp index e50c3a301b..a6070fc0f8 100644 --- a/src/web_service/web_backend.cpp +++ b/src/web_service/web_backend.cpp @@ -2,8 +2,9 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include +#include #include -#include #include "common/logging/log.h" #include "web_service/web_backend.h" @@ -11,6 +12,19 @@ namespace WebService { static constexpr char API_VERSION[]{"1"}; +static void PostJsonAuthenticated(const std::string& url, const std::string& data, + const std::string& username, const std::string& token) { + cpr::Post(cpr::Url{url}, cpr::Body{data}, cpr::Header{{"Content-Type", "application/json"}, + {"x-username", username}, + {"x-token", token}, + {"api-version", API_VERSION}}); +} + +static void PostJsonAnonymous(const std::string& url, const std::string& data) { + cpr::Post(cpr::Url{url}, cpr::Body{data}, + cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}}); +} + void PostJson(const std::string& url, const std::string& data, bool allow_anonymous, const std::string& username, const std::string& token) { if (url.empty()) { @@ -24,18 +38,13 @@ void PostJson(const std::string& url, const std::string& data, bool allow_anonym return; } + // Post JSON asynchronously by spawning a new thread if (are_credentials_provided) { // Authenticated request if credentials are provided - cpr::PostAsync(cpr::Url{url}, cpr::Body{data}, - cpr::Header{{"Content-Type", "application/json"}, - {"x-username", username}, - {"x-token", token}, - {"api-version", API_VERSION}}); + std::thread{PostJsonAuthenticated, url, data, username, token}.detach(); } else { // Otherwise, anonymous request - cpr::PostAsync( - cpr::Url{url}, cpr::Body{data}, - cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}}); + std::thread{PostJsonAnonymous, url, data}.detach(); } } From 076b39510451b1a0601e8a4db0d690615c81200f Mon Sep 17 00:00:00 2001 From: stone3311 Date: Sat, 26 Aug 2017 18:35:45 +0200 Subject: [PATCH 116/195] Fix info about TODO list --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e766918f70..31f5afe27c 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ For development discussion, please join us @ #citra on freenode. Most of the development happens on GitHub. It's also where [our central repository](https://github.com/citra-emu/citra) is hosted. -If you want to contribute please take a look at the [Contributor's Guide](CONTRIBUTING.md), [TODO list](https://docs.google.com/document/d/1SWIop0uBI9IW8VGg97TAtoT_CHNoP42FzYmvG1F4QDA) and [Developer Information](https://github.com/citra-emu/citra/wiki/Developer-Information). You should as well contact any of the developers in the forum in order to know about the current state of the emulator. +If you want to contribute please take a look at the [Contributor's Guide](CONTRIBUTING.md) and [Developer Information](https://github.com/citra-emu/citra/wiki/Developer-Information). You should as well contact any of the developers in the forum in order to know about the current state of the emulator because the [TODO list](https://docs.google.com/document/d/1SWIop0uBI9IW8VGg97TAtoT_CHNoP42FzYmvG1F4QDA) isn't maintained anymore. ### Building From da88f3b8f0f9f1162b7ad41f70e2126195eee999 Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 21 Aug 2017 12:18:52 -0500 Subject: [PATCH 117/195] Warnings: Fixed a few missing-return warnings in video_core. --- src/video_core/regs_framebuffer.h | 10 ++++------ src/video_core/swrasterizer/framebuffer.cpp | 2 ++ src/video_core/swrasterizer/texturing.cpp | 4 ++++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/video_core/regs_framebuffer.h b/src/video_core/regs_framebuffer.h index a50bd4111b..7b565f9111 100644 --- a/src/video_core/regs_framebuffer.h +++ b/src/video_core/regs_framebuffer.h @@ -256,10 +256,9 @@ struct FramebufferRegs { return 3; case DepthFormat::D24S8: return 4; - default: - LOG_CRITICAL(HW_GPU, "Unknown depth format %u", format); - UNIMPLEMENTED(); } + + ASSERT_MSG(false, "Unknown depth format %u", format); } // Returns the number of bits per depth component of the specified depth format @@ -270,10 +269,9 @@ struct FramebufferRegs { case DepthFormat::D24: case DepthFormat::D24S8: return 24; - default: - LOG_CRITICAL(HW_GPU, "Unknown depth format %u", format); - UNIMPLEMENTED(); } + + ASSERT_MSG(false, "Unknown depth format %u", format); } INSERT_PADDING_WORDS(0x20); diff --git a/src/video_core/swrasterizer/framebuffer.cpp b/src/video_core/swrasterizer/framebuffer.cpp index 7de3aac751..f34eab6cf9 100644 --- a/src/video_core/swrasterizer/framebuffer.cpp +++ b/src/video_core/swrasterizer/framebuffer.cpp @@ -352,6 +352,8 @@ u8 LogicOp(u8 src, u8 dest, FramebufferRegs::LogicOp op) { case FramebufferRegs::LogicOp::OrInverted: return ~src | dest; } + + UNREACHABLE(); }; } // namespace Rasterizer diff --git a/src/video_core/swrasterizer/texturing.cpp b/src/video_core/swrasterizer/texturing.cpp index 4f02b93f23..79b1ce8412 100644 --- a/src/video_core/swrasterizer/texturing.cpp +++ b/src/video_core/swrasterizer/texturing.cpp @@ -89,6 +89,8 @@ Math::Vec3 GetColorModifier(TevStageConfig::ColorModifier factor, case ColorModifier::OneMinusSourceBlue: return (Math::Vec3(255, 255, 255) - values.bbb()).Cast(); } + + UNREACHABLE(); }; u8 GetAlphaModifier(TevStageConfig::AlphaModifier factor, const Math::Vec4& values) { @@ -119,6 +121,8 @@ u8 GetAlphaModifier(TevStageConfig::AlphaModifier factor, const Math::Vec4& case AlphaModifier::OneMinusSourceBlue: return 255 - values.b(); } + + UNREACHABLE(); }; Math::Vec3 ColorCombine(TevStageConfig::Operation op, const Math::Vec3 input[3]) { From 7698567fc9b9d0b009264d5d8ab5babc3ea197d8 Mon Sep 17 00:00:00 2001 From: bunnei Date: Sat, 26 Aug 2017 19:02:03 -0400 Subject: [PATCH 118/195] web_backend: Fix CPR bug where Winsock is not properly initializing. --- src/web_service/web_backend.cpp | 42 +++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 15 deletions(-) diff --git a/src/web_service/web_backend.cpp b/src/web_service/web_backend.cpp index a6070fc0f8..d28a3f757f 100644 --- a/src/web_service/web_backend.cpp +++ b/src/web_service/web_backend.cpp @@ -2,6 +2,10 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#ifdef _WIN32 +#include +#endif + #include #include #include @@ -12,18 +16,7 @@ namespace WebService { static constexpr char API_VERSION[]{"1"}; -static void PostJsonAuthenticated(const std::string& url, const std::string& data, - const std::string& username, const std::string& token) { - cpr::Post(cpr::Url{url}, cpr::Body{data}, cpr::Header{{"Content-Type", "application/json"}, - {"x-username", username}, - {"x-token", token}, - {"api-version", API_VERSION}}); -} - -static void PostJsonAnonymous(const std::string& url, const std::string& data) { - cpr::Post(cpr::Url{url}, cpr::Body{data}, - cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}}); -} +static std::unique_ptr g_session; void PostJson(const std::string& url, const std::string& data, bool allow_anonymous, const std::string& username, const std::string& token) { @@ -38,14 +31,33 @@ void PostJson(const std::string& url, const std::string& data, bool allow_anonym return; } - // Post JSON asynchronously by spawning a new thread +#ifdef _WIN32 + // On Windows, CPR/libcurl does not properly initialize Winsock. The below code is used to + // initialize Winsock globally, which fixes this problem. Without this, only the first CPR + // session will properly be created, and subsequent ones will fail. + WSADATA wsa_data; + const int wsa_result{WSAStartup(MAKEWORD(2, 2), &wsa_data)}; + if (wsa_result) { + LOG_CRITICAL(WebService, "WSAStartup failed: %d", wsa_result); + } +#endif + + // Built request header + cpr::Header header; if (are_credentials_provided) { // Authenticated request if credentials are provided - std::thread{PostJsonAuthenticated, url, data, username, token}.detach(); + header = {{"Content-Type", "application/json"}, + {"x-username", username.c_str()}, + {"x-token", token.c_str()}, + {"api-version", API_VERSION}}; } else { // Otherwise, anonymous request - std::thread{PostJsonAnonymous, url, data}.detach(); + header = cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}}; } + + // Post JSON asynchronously + static cpr::AsyncResponse future; + future = cpr::PostAsync(cpr::Url{url.c_str()}, cpr::Body{data.c_str()}, header); } } // namespace WebService From 54411bef4eb16af0822820205a923690ea7e822a Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 17 Jul 2017 09:25:58 -0500 Subject: [PATCH 119/195] Services/UDS: Add functions to generate 802.11 auth and assoc response frames. --- src/core/CMakeLists.txt | 2 + src/core/hle/service/nwm/nwm_uds.h | 12 ++++ src/core/hle/service/nwm/uds_beacon.h | 11 --- src/core/hle/service/nwm/uds_connection.cpp | 79 +++++++++++++++++++++ src/core/hle/service/nwm/uds_connection.h | 51 +++++++++++++ 5 files changed, 144 insertions(+), 11 deletions(-) create mode 100644 src/core/hle/service/nwm/uds_connection.cpp create mode 100644 src/core/hle/service/nwm/uds_connection.h diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index ea09819e5e..0719138afe 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -144,6 +144,7 @@ set(SRCS hle/service/nwm/nwm_tst.cpp hle/service/nwm/nwm_uds.cpp hle/service/nwm/uds_beacon.cpp + hle/service/nwm/uds_connection.cpp hle/service/nwm/uds_data.cpp hle/service/pm_app.cpp hle/service/ptm/ptm.cpp @@ -342,6 +343,7 @@ set(HEADERS hle/service/nwm/nwm_tst.h hle/service/nwm/nwm_uds.h hle/service/nwm/uds_beacon.h + hle/service/nwm/uds_connection.h hle/service/nwm/uds_data.h hle/service/pm_app.h hle/service/ptm/ptm.h diff --git a/src/core/hle/service/nwm/nwm_uds.h b/src/core/hle/service/nwm/nwm_uds.h index 141f49f9c0..f1caaf9746 100644 --- a/src/core/hle/service/nwm/nwm_uds.h +++ b/src/core/hle/service/nwm/nwm_uds.h @@ -42,6 +42,7 @@ using NodeList = std::vector; enum class NetworkStatus { NotConnected = 3, ConnectedAsHost = 6, + Connecting = 7, ConnectedAsClient = 9, ConnectedAsSpectator = 10, }; @@ -85,6 +86,17 @@ static_assert(offsetof(NetworkInfo, oui_value) == 0xC, "oui_value is at the wron static_assert(offsetof(NetworkInfo, wlan_comm_id) == 0x10, "wlancommid is at the wrong offset."); static_assert(sizeof(NetworkInfo) == 0x108, "NetworkInfo has incorrect size."); +/// Additional block tag ids in the Beacon and Association Response frames +enum class TagId : u8 { + SSID = 0, + SupportedRates = 1, + DSParameterSet = 2, + TrafficIndicationMap = 5, + CountryInformation = 7, + ERPInformation = 42, + VendorSpecific = 221 +}; + class NWM_UDS final : public Interface { public: NWM_UDS(); diff --git a/src/core/hle/service/nwm/uds_beacon.h b/src/core/hle/service/nwm/uds_beacon.h index caacf4c6fa..c726b04d96 100644 --- a/src/core/hle/service/nwm/uds_beacon.h +++ b/src/core/hle/service/nwm/uds_beacon.h @@ -17,17 +17,6 @@ namespace NWM { using MacAddress = std::array; constexpr std::array NintendoOUI = {0x00, 0x1F, 0x32}; -/// Additional block tag ids in the Beacon frames -enum class TagId : u8 { - SSID = 0, - SupportedRates = 1, - DSParameterSet = 2, - TrafficIndicationMap = 5, - CountryInformation = 7, - ERPInformation = 42, - VendorSpecific = 221 -}; - /** * Internal vendor-specific tag ids as stored inside * VendorSpecific blocks in the Beacon frames. diff --git a/src/core/hle/service/nwm/uds_connection.cpp b/src/core/hle/service/nwm/uds_connection.cpp new file mode 100644 index 0000000000..c8a76ec2aa --- /dev/null +++ b/src/core/hle/service/nwm/uds_connection.cpp @@ -0,0 +1,79 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/hle/service/nwm/nwm_uds.h" +#include "core/hle/service/nwm/uds_connection.h" +#include "fmt/format.h" + +namespace Service { +namespace NWM { + +// Note: These values were taken from a packet capture of an o3DS XL +// broadcasting a Super Smash Bros. 4 lobby. +constexpr u16 DefaultExtraCapabilities = 0x0431; + +std::vector GenerateAuthenticationFrame(AuthenticationSeq seq) { + AuthenticationFrame frame{}; + frame.auth_seq = static_cast(seq); + + std::vector data(sizeof(frame)); + std::memcpy(data.data(), &frame, sizeof(frame)); + + return data; +} + +AuthenticationSeq GetAuthenticationSeqNumber(const std::vector& body) { + AuthenticationFrame frame; + std::memcpy(&frame, body.data(), sizeof(frame)); + + return static_cast(frame.auth_seq); +} + +/** + * Generates an SSID tag of an 802.11 Beacon frame with an 8-byte character representation of the + * specified network id as the SSID value. + * @param network_id The network id to use. + * @returns A buffer with the SSID tag. + */ +static std::vector GenerateSSIDTag(u32 network_id) { + constexpr u8 SSIDSize = 8; + + struct { + u8 id = static_cast(TagId::SSID); + u8 size = SSIDSize; + } tag_header; + + std::vector buffer(sizeof(tag_header) + SSIDSize); + + std::memcpy(buffer.data(), &tag_header, sizeof(tag_header)); + + std::string network_name = fmt::format("{0:08X}", network_id); + + std::memcpy(buffer.data() + sizeof(tag_header), network_name.c_str(), SSIDSize); + + return buffer; +} + +std::vector GenerateAssocResponseFrame(AssocStatus status, u16 association_id, u32 network_id) { + AssociationResponseFrame frame{}; + frame.capabilities = DefaultExtraCapabilities; + frame.status_code = static_cast(status); + // The association id is ORed with this magic value (0xC000) + constexpr u16 AssociationIdMagic = 0xC000; + frame.assoc_id = association_id | AssociationIdMagic; + + std::vector data(sizeof(frame)); + std::memcpy(data.data(), &frame, sizeof(frame)); + + auto ssid_tag = GenerateSSIDTag(network_id); + data.insert(data.end(), ssid_tag.begin(), ssid_tag.end()); + + // TODO(Subv): Add the SupportedRates tag. + // TODO(Subv): Add the DSParameterSet tag. + // TODO(Subv): Add the ERPInformation tag. + return data; +} + +} // namespace NWM +} // namespace Service diff --git a/src/core/hle/service/nwm/uds_connection.h b/src/core/hle/service/nwm/uds_connection.h new file mode 100644 index 0000000000..73f55a4fd9 --- /dev/null +++ b/src/core/hle/service/nwm/uds_connection.h @@ -0,0 +1,51 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include "common/common_types.h" +#include "common/swap.h" +#include "core/hle/service/service.h" + +namespace Service { +namespace NWM { + +/// Sequence number of the 802.11 authentication frames. +enum class AuthenticationSeq : u16 { SEQ1 = 1, SEQ2 = 2 }; + +enum class AuthAlgorithm : u16 { OpenSystem = 0 }; + +enum class AuthStatus : u16 { Successful = 0 }; + +enum class AssocStatus : u16 { Successful = 0 }; + +struct AuthenticationFrame { + u16_le auth_algorithm = static_cast(AuthAlgorithm::OpenSystem); + u16_le auth_seq; + u16_le status_code = static_cast(AuthStatus::Successful); +}; + +static_assert(sizeof(AuthenticationFrame) == 6, "AuthenticationFrame has wrong size"); + +struct AssociationResponseFrame { + u16_le capabilities; + u16_le status_code; + u16_le assoc_id; +}; + +static_assert(sizeof(AssociationResponseFrame) == 6, "AssociationResponseFrame has wrong size"); + +/// Generates an 802.11 authentication frame, starting at the frame body. +std::vector GenerateAuthenticationFrame(AuthenticationSeq seq); + +/// Returns the sequence number from the body of an Authentication frame. +AuthenticationSeq GetAuthenticationSeqNumber(const std::vector& body); + +/// Generates an 802.11 association response frame with the specified status, association id and +/// network id, starting at the frame body. +std::vector GenerateAssocResponseFrame(AssocStatus status, u16 association_id, u32 network_id); + +} // namespace NWM +} // namespace Service From 2e9f544ecc9a01ff59859b43d65c61a2838e7c34 Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 17 Jul 2017 09:39:12 -0500 Subject: [PATCH 120/195] Services/UDS: Store the received beacon frames until RecvBeaconBroadcastData is called, up to 15 beacons at the same time, removing any older beacon frames when the limit is exceeded. --- src/core/hle/service/nwm/nwm_uds.cpp | 65 ++++++++++++++++++++++++++-- 1 file changed, 62 insertions(+), 3 deletions(-) diff --git a/src/core/hle/service/nwm/nwm_uds.cpp b/src/core/hle/service/nwm/nwm_uds.cpp index 6dbdff0446..8fdf160ff6 100644 --- a/src/core/hle/service/nwm/nwm_uds.cpp +++ b/src/core/hle/service/nwm/nwm_uds.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include #include "common/common_types.h" @@ -15,8 +16,10 @@ #include "core/hle/result.h" #include "core/hle/service/nwm/nwm_uds.h" #include "core/hle/service/nwm/uds_beacon.h" +#include "core/hle/service/nwm/uds_connection.h" #include "core/hle/service/nwm/uds_data.h" #include "core/memory.h" +#include "network/network.h" namespace Service { namespace NWM { @@ -51,6 +54,52 @@ static NetworkInfo network_info; // Event that will generate and send the 802.11 beacon frames. static int beacon_broadcast_event; +// Mutex to synchronize access to the list of received beacons between the emulation thread and the +// network thread. +static std::mutex beacon_mutex; + +// Number of beacons to store before we start dropping the old ones. +// TODO(Subv): Find a more accurate value for this limit. +constexpr size_t MaxBeaconFrames = 15; + +// List of the last beacons received from the network. +static std::deque received_beacons; + +/** + * Returns a list of received 802.11 beacon frames from the specified sender since the last call. + */ +std::deque GetReceivedBeacons(const MacAddress& sender) { + std::lock_guard lock(beacon_mutex); + // TODO(Subv): Filter by sender. + return std::move(received_beacons); +} + +/// Sends a WifiPacket to the room we're currently connected to. +void SendPacket(Network::WifiPacket& packet) { + // TODO(Subv): Implement. +} + +// Inserts the received beacon frame in the beacon queue and removes any older beacons if the size +// limit is exceeded. +void HandleBeaconFrame(const Network::WifiPacket& packet) { + std::lock_guard lock(beacon_mutex); + + received_beacons.emplace_back(packet); + + // Discard old beacons if the buffer is full. + if (received_beacons.size() > MaxBeaconFrames) + received_beacons.pop_front(); +} + +/// Callback to parse and handle a received wifi packet. +void OnWifiPacketReceived(const Network::WifiPacket& packet) { + switch (packet.type) { + case Network::WifiPacket::PacketType::Beacon: + HandleBeaconFrame(packet); + break; + } +} + /** * NWM_UDS::Shutdown service function * Inputs: @@ -111,8 +160,7 @@ static void RecvBeaconBroadcastData(Interface* self) { u32 total_size = sizeof(BeaconDataReplyHeader); // Retrieve all beacon frames that were received from the desired mac address. - std::deque beacons = - GetReceivedPackets(WifiPacket::PacketType::Beacon, mac_address); + auto beacons = GetReceivedBeacons(mac_address); BeaconDataReplyHeader data_reply_header{}; data_reply_header.total_entries = beacons.size(); @@ -193,6 +241,9 @@ static void InitializeWithVersion(Interface* self) { rb.Push(RESULT_SUCCESS); rb.PushCopyHandles(Kernel::g_handle_table.Create(connection_status_event).Unwrap()); + // TODO(Subv): Connect the OnWifiPacketReceived function to the wifi packet received callback of + // the room we're currently in. + LOG_DEBUG(Service_NWM, "called sharedmem_size=0x%08X, version=0x%08X, sharedmem_handle=0x%08X", sharedmem_size, version, sharedmem_handle); } @@ -610,9 +661,17 @@ static void BeaconBroadcastCallback(u64 userdata, int cycles_late) { if (connection_status.status != static_cast(NetworkStatus::ConnectedAsHost)) return; - // TODO(Subv): Actually send the beacon. std::vector frame = GenerateBeaconFrame(network_info, node_info); + using Network::WifiPacket; + WifiPacket packet; + packet.type = WifiPacket::PacketType::Beacon; + packet.data = std::move(frame); + packet.destination_address = Network::BroadcastMac; + packet.channel = network_channel; + + SendPacket(packet); + // Start broadcasting the network, send a beacon frame every 102.4ms. CoreTiming::ScheduleEvent(msToCycles(DefaultBeaconInterval * MillisecondsPerTU) - cycles_late, beacon_broadcast_event, 0); From d088dbfbe1064bb5212e83c50e71e4b2ea5b00cd Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 17 Jul 2017 09:51:03 -0500 Subject: [PATCH 121/195] Services/UDS: Handle the connection sequence packets. There is currently no stage tracking, a client is considered "Connected" when it receives the EAPoL Logoff packet from the server, this is not yet implemented. --- src/core/hle/service/nwm/nwm_uds.cpp | 100 ++++++++++++++++++++++----- 1 file changed, 83 insertions(+), 17 deletions(-) diff --git a/src/core/hle/service/nwm/nwm_uds.cpp b/src/core/hle/service/nwm/nwm_uds.cpp index 8fdf160ff6..893bbb1e79 100644 --- a/src/core/hle/service/nwm/nwm_uds.cpp +++ b/src/core/hle/service/nwm/nwm_uds.cpp @@ -91,12 +91,95 @@ void HandleBeaconFrame(const Network::WifiPacket& packet) { received_beacons.pop_front(); } +/* + * Returns an available index in the nodes array for the + * currently-hosted UDS network. + */ +static u16 GetNextAvailableNodeId() { + ASSERT_MSG(connection_status.status == static_cast(NetworkStatus::ConnectedAsHost), + "Can not accept clients if we're not hosting a network"); + + for (u16 index = 0; index < connection_status.max_nodes; ++index) { + if ((connection_status.node_bitmask & (1 << index)) == 0) + return index; + } + + // Any connection attempts to an already full network should have been refused. + ASSERT_MSG(false, "No available connection slots in the network"); +} + +/* + * Start a connection sequence with an UDS server. The sequence starts by sending an 802.11 + * authentication frame with SEQ1. + */ +void StartConnectionSequence(const MacAddress& server) { + ASSERT(connection_status.status == static_cast(NetworkStatus::NotConnected)); + + // TODO(Subv): Handle timeout. + + // Send an authentication frame with SEQ1 + using Network::WifiPacket; + WifiPacket auth_request; + auth_request.channel = network_channel; + auth_request.data = GenerateAuthenticationFrame(AuthenticationSeq::SEQ1); + auth_request.destination_address = server; + auth_request.type = WifiPacket::PacketType::Authentication; + + SendPacket(auth_request); +} + +/// Sends an Association Response frame to the specified mac address +void SendAssociationResponseFrame(const MacAddress& address) { + ASSERT_MSG(connection_status.status == static_cast(NetworkStatus::ConnectedAsHost)); + + using Network::WifiPacket; + WifiPacket assoc_response; + assoc_response.channel = network_channel; + // TODO(Subv): This will cause multiple clients to end up with the same association id, but + // we're not using that for anything. + u16 association_id = 1; + assoc_response.data = GenerateAssocResponseFrame(AssocStatus::Successful, association_id, + network_info.network_id); + assoc_response.destination_address = address; + assoc_response.type = WifiPacket::PacketType::AssociationResponse; + + SendPacket(assoc_response); +} + +/* + * Handles the authentication request frame and sends the authentication response and association + * response frames. Once an Authentication frame with SEQ1 is received by the server, it responds + * with an Authentication frame containing SEQ2, and immediately sends an Association response frame + * containing the details of the access point and the assigned association id for the new client. + */ +void HandleAuthenticationFrame(const Network::WifiPacket& packet) { + // Only the SEQ1 auth frame is handled here, the SEQ2 frame doesn't need any special behavior + if (GetAuthenticationSeqNumber(packet.data) == AuthenticationSeq::SEQ1) { + ASSERT_MSG(connection_status.status == static_cast(NetworkStatus::ConnectedAsHost)); + + // Respond with an authentication response frame with SEQ2 + using Network::WifiPacket; + WifiPacket auth_request; + auth_request.channel = network_channel; + auth_request.data = GenerateAuthenticationFrame(AuthenticationSeq::SEQ2); + auth_request.destination_address = packet.transmitter_address; + auth_request.type = WifiPacket::PacketType::Authentication; + + SendPacket(auth_request); + + SendAssociationResponseFrame(packet.transmitter_address); + } +} + /// Callback to parse and handle a received wifi packet. void OnWifiPacketReceived(const Network::WifiPacket& packet) { switch (packet.type) { case Network::WifiPacket::PacketType::Beacon: HandleBeaconFrame(packet); break; + case Network::WifiPacket::PacketType::Authentication: + HandleAuthenticationFrame(packet); + break; } } @@ -677,23 +760,6 @@ static void BeaconBroadcastCallback(u64 userdata, int cycles_late) { beacon_broadcast_event, 0); } -/* - * Returns an available index in the nodes array for the - * currently-hosted UDS network. - */ -static u32 GetNextAvailableNodeId() { - ASSERT_MSG(connection_status.status == static_cast(NetworkStatus::ConnectedAsHost), - "Can not accept clients if we're not hosting a network"); - - for (unsigned index = 0; index < connection_status.max_nodes; ++index) { - if ((connection_status.node_bitmask & (1 << index)) == 0) - return index; - } - - // Any connection attempts to an already full network should have been refused. - ASSERT_MSG(false, "No available connection slots in the network"); -} - /* * Called when a client connects to an UDS network we're hosting, * updates the connection status and signals the update event. From f64cd87604b7a760e2832c76938d83ec6a284b22 Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 17 Jul 2017 09:51:40 -0500 Subject: [PATCH 122/195] Services/UDS: Remove an old duplicated declaration of WifiPacket. --- src/core/hle/service/nwm/uds_beacon.cpp | 3 --- src/core/hle/service/nwm/uds_beacon.h | 19 ------------------- 2 files changed, 22 deletions(-) diff --git a/src/core/hle/service/nwm/uds_beacon.cpp b/src/core/hle/service/nwm/uds_beacon.cpp index 6332b404cc..552eaf65ec 100644 --- a/src/core/hle/service/nwm/uds_beacon.cpp +++ b/src/core/hle/service/nwm/uds_beacon.cpp @@ -325,8 +325,5 @@ std::vector GenerateBeaconFrame(const NetworkInfo& network_info, const NodeL return buffer; } -std::deque GetReceivedPackets(WifiPacket::PacketType type, const MacAddress& sender) { - return {}; -} } // namespace NWM } // namespace Service diff --git a/src/core/hle/service/nwm/uds_beacon.h b/src/core/hle/service/nwm/uds_beacon.h index c726b04d96..50cc76da2d 100644 --- a/src/core/hle/service/nwm/uds_beacon.h +++ b/src/core/hle/service/nwm/uds_beacon.h @@ -124,20 +124,6 @@ struct BeaconData { static_assert(sizeof(BeaconData) == 0x12, "BeaconData has incorrect size."); -/// Information about a received WiFi packet. -/// Acts as our own 802.11 header. -struct WifiPacket { - enum class PacketType { Beacon, Data }; - - PacketType type; ///< The type of 802.11 frame, Beacon / Data. - - /// Raw 802.11 frame data, starting at the management frame header for management frames. - std::vector data; - MacAddress transmitter_address; ///< Mac address of the transmitter. - MacAddress destination_address; ///< Mac address of the receiver. - u8 channel; ///< WiFi channel where this frame was transmitted. -}; - /** * Decrypts the beacon data buffer for the network described by `network_info`. */ @@ -150,10 +136,5 @@ void DecryptBeaconData(const NetworkInfo& network_info, std::vector& buffer) */ std::vector GenerateBeaconFrame(const NetworkInfo& network_info, const NodeList& nodes); -/** - * Returns a list of received 802.11 frames from the specified sender - * matching the type since the last call. - */ -std::deque GetReceivedPackets(WifiPacket::PacketType type, const MacAddress& sender); } // namespace NWM } // namespace Service From 933508e2a2f7923cebc15d679b78933df8fb9ee5 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Thu, 3 Aug 2017 12:22:51 +0100 Subject: [PATCH 123/195] interpolate: Interpolate on a frame-by-frame basis --- src/audio_core/hle/source.cpp | 49 ++++++++----------- src/audio_core/interpolate.cpp | 86 +++++++++++++++------------------- src/audio_core/interpolate.h | 27 ++++++----- 3 files changed, 74 insertions(+), 88 deletions(-) diff --git a/src/audio_core/hle/source.cpp b/src/audio_core/hle/source.cpp index 92484c5261..de4e88caee 100644 --- a/src/audio_core/hle/source.cpp +++ b/src/audio_core/hle/source.cpp @@ -244,17 +244,27 @@ void Source::GenerateFrame() { break; } - const size_t size_to_copy = - std::min(state.current_buffer.size(), current_frame.size() - frame_position); - - std::copy(state.current_buffer.begin(), state.current_buffer.begin() + size_to_copy, - current_frame.begin() + frame_position); - state.current_buffer.erase(state.current_buffer.begin(), - state.current_buffer.begin() + size_to_copy); - - frame_position += size_to_copy; - state.next_sample_number += static_cast(size_to_copy); + switch (state.interpolation_mode) { + case InterpolationMode::None: + AudioInterp::None(state.interp_state, state.current_buffer, state.rate_multiplier, + current_frame, frame_position); + break; + case InterpolationMode::Linear: + AudioInterp::Linear(state.interp_state, state.current_buffer, state.rate_multiplier, + current_frame, frame_position); + break; + case InterpolationMode::Polyphase: + // TODO(merry): Implement polyphase interpolation + LOG_DEBUG(Audio_DSP, "Polyphase interpolation unimplemented; falling back to linear"); + AudioInterp::Linear(state.interp_state, state.current_buffer, state.rate_multiplier, + current_frame, frame_position); + break; + default: + UNIMPLEMENTED(); + break; + } } + state.next_sample_number += frame_position; state.filters.ProcessFrame(current_frame); } @@ -305,25 +315,6 @@ bool Source::DequeueBuffer() { return true; } - switch (state.interpolation_mode) { - case InterpolationMode::None: - state.current_buffer = - AudioInterp::None(state.interp_state, state.current_buffer, state.rate_multiplier); - break; - case InterpolationMode::Linear: - state.current_buffer = - AudioInterp::Linear(state.interp_state, state.current_buffer, state.rate_multiplier); - break; - case InterpolationMode::Polyphase: - // TODO(merry): Implement polyphase interpolation - state.current_buffer = - AudioInterp::Linear(state.interp_state, state.current_buffer, state.rate_multiplier); - break; - default: - UNIMPLEMENTED(); - break; - } - // the first playthrough starts at play_position, loops start at the beginning of the buffer state.current_sample_number = (!buf.has_played) ? buf.play_position : 0; state.next_sample_number = state.current_sample_number; diff --git a/src/audio_core/interpolate.cpp b/src/audio_core/interpolate.cpp index 8a5d4181af..16e68bc5c4 100644 --- a/src/audio_core/interpolate.cpp +++ b/src/audio_core/interpolate.cpp @@ -13,74 +13,64 @@ namespace AudioInterp { constexpr u64 scale_factor = 1 << 24; constexpr u64 scale_mask = scale_factor - 1; -/// Here we step over the input in steps of rate_multiplier, until we consume all of the input. +/// Here we step over the input in steps of rate, until we consume all of the input. /// Three adjacent samples are passed to fn each step. template -static StereoBuffer16 StepOverSamples(State& state, const StereoBuffer16& input, - float rate_multiplier, Function fn) { - ASSERT(rate_multiplier > 0); +static void StepOverSamples(State& state, StereoBuffer16& input, float rate, + DSP::HLE::StereoFrame16& output, size_t& outputi, Function fn) { + ASSERT(rate > 0); - if (input.size() < 2) - return {}; + if (input.empty()) + return; - StereoBuffer16 output; - output.reserve(static_cast(input.size() / rate_multiplier)); + input.insert(input.begin(), {state.xn2, state.xn1}); - u64 step_size = static_cast(rate_multiplier * scale_factor); + const u64 step_size = static_cast(rate * scale_factor); + u64 fposition = state.fposition; + size_t inputi = 0; - u64 fposition = 0; - const u64 max_fposition = input.size() * scale_factor; + while (outputi < output.size()) { + inputi = static_cast(fposition / scale_factor); + + if (inputi + 2 >= input.size()) { + inputi = input.size() - 2; + break; + } - while (fposition < 1 * scale_factor) { u64 fraction = fposition & scale_mask; - - output.push_back(fn(fraction, state.xn2, state.xn1, input[0])); + output[outputi++] = fn(fraction, input[inputi], input[inputi + 1], input[inputi + 2]); fposition += step_size; } - while (fposition < 2 * scale_factor) { - u64 fraction = fposition & scale_mask; + state.xn2 = input[inputi]; + state.xn1 = input[inputi + 1]; + state.fposition = fposition - inputi * scale_factor; - output.push_back(fn(fraction, state.xn1, input[0], input[1])); - - fposition += step_size; - } - - while (fposition < max_fposition) { - u64 fraction = fposition & scale_mask; - - size_t index = static_cast(fposition / scale_factor); - output.push_back(fn(fraction, input[index - 2], input[index - 1], input[index])); - - fposition += step_size; - } - - state.xn2 = input[input.size() - 2]; - state.xn1 = input[input.size() - 1]; - - return output; + input.erase(input.begin(), input.begin() + inputi + 2); } -StereoBuffer16 None(State& state, const StereoBuffer16& input, float rate_multiplier) { - return StepOverSamples( - state, input, rate_multiplier, +void None(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output, + size_t& outputi) { + StepOverSamples( + state, input, rate, output, outputi, [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { return x0; }); } -StereoBuffer16 Linear(State& state, const StereoBuffer16& input, float rate_multiplier) { +void Linear(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output, + size_t& outputi) { // Note on accuracy: Some values that this produces are +/- 1 from the actual firmware. - return StepOverSamples(state, input, rate_multiplier, - [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { - // This is a saturated subtraction. (Verified by black-box fuzzing.) - s64 delta0 = MathUtil::Clamp(x1[0] - x0[0], -32768, 32767); - s64 delta1 = MathUtil::Clamp(x1[1] - x0[1], -32768, 32767); + StepOverSamples(state, input, rate, output, outputi, + [](u64 fraction, const auto& x0, const auto& x1, const auto& x2) { + // This is a saturated subtraction. (Verified by black-box fuzzing.) + s64 delta0 = MathUtil::Clamp(x1[0] - x0[0], -32768, 32767); + s64 delta1 = MathUtil::Clamp(x1[1] - x0[1], -32768, 32767); - return std::array{ - static_cast(x0[0] + fraction * delta0 / scale_factor), - static_cast(x0[1] + fraction * delta1 / scale_factor), - }; - }); + return std::array{ + static_cast(x0[0] + fraction * delta0 / scale_factor), + static_cast(x0[1] + fraction * delta1 / scale_factor), + }; + }); } } // namespace AudioInterp diff --git a/src/audio_core/interpolate.h b/src/audio_core/interpolate.h index 19a7b66cb0..59f59bc141 100644 --- a/src/audio_core/interpolate.h +++ b/src/audio_core/interpolate.h @@ -6,6 +6,7 @@ #include #include +#include "audio_core/hle/common.h" #include "common/common_types.h" namespace AudioInterp { @@ -14,31 +15,35 @@ namespace AudioInterp { using StereoBuffer16 = std::vector>; struct State { - // Two historical samples. + /// Two historical samples. std::array xn1 = {}; ///< x[n-1] std::array xn2 = {}; ///< x[n-2] + /// Current fractional position. + u64 fposition = 0; }; /** * No interpolation. This is equivalent to a zero-order hold. There is a two-sample predelay. * @param state Interpolation state. * @param input Input buffer. - * @param rate_multiplier Stretch factor. Must be a positive non-zero value. - * rate_multiplier > 1.0 performs decimation and rate_multipler < 1.0 - * performs upsampling. - * @return The resampled audio buffer. + * @param rate Stretch factor. Must be a positive non-zero value. + * rate > 1.0 performs decimation and rate < 1.0 performs upsampling. + * @param output The resampled audio buffer. + * @param outputi The index of output to start writing to. */ -StereoBuffer16 None(State& state, const StereoBuffer16& input, float rate_multiplier); +void None(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output, + size_t& outputi); /** * Linear interpolation. This is equivalent to a first-order hold. There is a two-sample predelay. * @param state Interpolation state. * @param input Input buffer. - * @param rate_multiplier Stretch factor. Must be a positive non-zero value. - * rate_multiplier > 1.0 performs decimation and rate_multipler < 1.0 - * performs upsampling. - * @return The resampled audio buffer. + * @param rate Stretch factor. Must be a positive non-zero value. + * rate > 1.0 performs decimation and rate < 1.0 performs upsampling. + * @param output The resampled audio buffer. + * @param outputi The index of output to start writing to. */ -StereoBuffer16 Linear(State& state, const StereoBuffer16& input, float rate_multiplier); +void Linear(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output, + size_t& outputi); } // namespace AudioInterp From 826606479682234c98e4dfa6e616e637a28d4fcc Mon Sep 17 00:00:00 2001 From: danzel Date: Tue, 29 Aug 2017 20:39:55 +1200 Subject: [PATCH 124/195] Use recursive_mutex instead of mutex to fix #2902 --- src/core/hle/lock.cpp | 2 +- src/core/hle/lock.h | 2 +- src/core/hle/svc.cpp | 2 +- src/core/memory.cpp | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/core/hle/lock.cpp b/src/core/hle/lock.cpp index 082f689c86..1c24c7ce95 100644 --- a/src/core/hle/lock.cpp +++ b/src/core/hle/lock.cpp @@ -7,5 +7,5 @@ #include namespace HLE { -std::mutex g_hle_lock; +std::recursive_mutex g_hle_lock; } diff --git a/src/core/hle/lock.h b/src/core/hle/lock.h index 8265621e1d..5c99fe9966 100644 --- a/src/core/hle/lock.h +++ b/src/core/hle/lock.h @@ -14,5 +14,5 @@ namespace HLE { * to the emulated memory is not protected by this mutex, and should be avoided in any threads other * than the CPU thread. */ -extern std::mutex g_hle_lock; +extern std::recursive_mutex g_hle_lock; } // namespace HLE diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index b98938cb4c..dfc36748c1 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -1334,7 +1334,7 @@ void CallSVC(u32 immediate) { MICROPROFILE_SCOPE(Kernel_SVC); // Lock the global kernel mutex when we enter the kernel HLE. - std::lock_guard lock(HLE::g_hle_lock); + std::lock_guard lock(HLE::g_hle_lock); const FunctionDef* info = GetSVCInfo(immediate); if (info) { diff --git a/src/core/memory.cpp b/src/core/memory.cpp index a3c5f4a9d0..097bc5b47f 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -183,7 +183,7 @@ T Read(const VAddr vaddr) { } // The memory access might do an MMIO or cached access, so we have to lock the HLE kernel state - std::lock_guard lock(HLE::g_hle_lock); + std::lock_guard lock(HLE::g_hle_lock); PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; switch (type) { @@ -224,7 +224,7 @@ void Write(const VAddr vaddr, const T data) { } // The memory access might do an MMIO or cached access, so we have to lock the HLE kernel state - std::lock_guard lock(HLE::g_hle_lock); + std::lock_guard lock(HLE::g_hle_lock); PageType type = current_page_table->attributes[vaddr >> PAGE_BITS]; switch (type) { From e2c41a589198ff3162da8047a4c33162b02b0f2b Mon Sep 17 00:00:00 2001 From: wwylele Date: Thu, 31 Aug 2017 12:24:00 +0300 Subject: [PATCH 125/195] video_core: report telemetry for gas mode --- src/video_core/renderer_opengl/gl_shader_gen.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index 3f390491ad..c8fc7a0ff0 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -8,6 +8,7 @@ #include "common/assert.h" #include "common/bit_field.h" #include "common/logging/log.h" +#include "core/core.h" #include "video_core/regs_framebuffer.h" #include "video_core/regs_lighting.h" #include "video_core/regs_rasterizer.h" @@ -1155,6 +1156,11 @@ vec4 secondary_fragment_color = vec4(0.0); // Blend the fog out += "last_tex_env_out.rgb = mix(fog_color.rgb, last_tex_env_out.rgb, fog_factor);\n"; + } else if (state.fog_mode == TexturingRegs::FogMode::Gas) { + Core::Telemetry().AddField(Telemetry::FieldType::Session, "VideoCore_Pica_UseGasMode", + true); + LOG_CRITICAL(Render_OpenGL, "Unimplemented gas mode"); + UNIMPLEMENTED(); } out += "gl_FragDepth = depth;\n"; From ab47bf6ad65b870f447fe2c1a39f3c288b906c3d Mon Sep 17 00:00:00 2001 From: James Rowe Date: Wed, 30 Aug 2017 19:39:24 -0600 Subject: [PATCH 126/195] Build: Add mingw64 compile support to appveyor Releases will be built with both mingw and msvc and the binaries of both builds will be uploaded to github releases --- appveyor.yml | 161 ++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 122 insertions(+), 39 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 94e9969f5e..1c390cdd53 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -7,6 +7,15 @@ cache: os: Visual Studio 2017 +environment: + # Tell msys2 to add mingw64 to the path + MSYSTEM: MINGW64 + # Tell msys2 to inherit the current directory when starting the shell + CHERE_INVOKING: 1 + matrix: + - BUILD_TYPE: mingw + - BUILD_TYPE: msvc + platform: - x64 @@ -15,72 +24,146 @@ configuration: install: - git submodule update --init --recursive + - ps: | + if ($env:BUILD_TYPE -eq 'mingw') { + $dependencies = "mingw64/mingw-w64-x86_64-cmake", + "mingw64/mingw-w64-x86_64-qt5", + "mingw64/mingw-w64-x86_64-curl", + "mingw64/mingw-w64-x86_64-SDL2" + # redirect err to null to prevent warnings from becoming errors + # workaround to prevent pacman from failing due to cyclical dependencies + C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S mingw64/mingw-w64-x86_64-freetype mingw64/mingw-w64-x86_64-fontconfig" 2> $null + C:\msys64\usr\bin\bash -lc "pacman --noconfirm -S $dependencies" 2> $null + } before_build: - - mkdir build - - cd build - - cmake -G "Visual Studio 15 2017 Win64" -DCITRA_USE_BUNDLED_QT=1 -DCITRA_USE_BUNDLED_SDL2=1 -DCMAKE_USE_OPENSSL=0 .. + - mkdir %BUILD_TYPE%_build + - cd %BUILD_TYPE%_build + - ps: | + if ($env:BUILD_TYPE -eq 'msvc') { + # redirect stderr and change the exit code to prevent powershell from cancelling the build if cmake prints a warning + cmd /C 'cmake -G "Visual Studio 15 2017 Win64" -DCITRA_USE_BUNDLED_QT=1 -DCITRA_USE_BUNDLED_SDL2=1 -DCMAKE_USE_OPENSSL=0 .. 2>&1 && exit 0' + } else { + C:\msys64\usr\bin\bash.exe -lc "cmake -G 'MSYS Makefiles' -DUSE_SYSTEM_CURL=1 -DCMAKE_BUILD_TYPE=Release .. 2>&1" + } - cd .. -build: - project: build/citra.sln - parallel: true +build_script: + - ps: | + if ($env:BUILD_TYPE -eq 'msvc') { + # https://www.appveyor.com/docs/build-phase + msbuild msvc_build/citra.sln /maxcpucount /logger:"C:\Program Files\AppVeyor\BuildAgent\Appveyor.MSBuildLogger.dll" + } else { + C:\msys64\usr\bin\bash.exe -lc 'mingw32-make -C mingw_build/ 2>&1' + } after_build: - ps: | $GITDATE = $(git show -s --date=short --format='%ad') -replace "-","" $GITREV = $(git show -s --format='%h') - $GIT_LONG_HASH = $(git rev-parse HEAD) - # Where are these spaces coming from? Regardless, let's remove them - $MSVC_BUILD_NAME = "citra-windows-msvc-$GITDATE-$GITREV.zip" -replace " ", "" - $MSVC_BUILD_PDB = "citra-windows-msvc-$GITDATE-$GITREV-debugsymbols.zip" -replace " ", "" - $MSVC_SEVENZIP = "citra-windows-msvc-$GITDATE-$GITREV.7z" -replace " ", "" - $BINTRAY_VERSION = "nightly-$GIT_LONG_HASH" -replace " ", "" - - # set the build names as env vars so the artifacts can upload them - $env:MSVC_BUILD_NAME = $MSVC_BUILD_NAME - $env:MSVC_BUILD_PDB = $MSVC_BUILD_PDB - $env:MSVC_SEVENZIP = $MSVC_SEVENZIP - $env:GITREV = $GITREV - - 7z a -tzip $MSVC_BUILD_PDB .\build\bin\release\*.pdb - rm .\build\bin\release\*.pdb # Find out which kind of release we are producing by tag name if ($env:APPVEYOR_REPO_TAG_NAME) { - $RELEASE_DIST, $RELEASE_VERSION = $env:APPVEYOR_REPO_TAG_NAME.split('-') + $RELEASE_DIST, $RELEASE_VERSION = $env:APPVEYOR_REPO_TAG_NAME.split('-') } else { - # There is no repo tag - make assumptions - $RELEASE_DIST = "head" + # There is no repo tag - make assumptions + $RELEASE_DIST = "head" } - mkdir $RELEASE_DIST - Copy-Item .\build\bin\release\* -Destination $RELEASE_DIST -Recurse - Copy-Item .\license.txt -Destination $RELEASE_DIST - Copy-Item .\README.md -Destination $RELEASE_DIST + if ($env:BUILD_TYPE -eq 'msvc') { + # Where are these spaces coming from? Regardless, let's remove them + $MSVC_BUILD_ZIP = "citra-windows-msvc-$GITDATE-$GITREV.zip" -replace " ", "" + $MSVC_BUILD_PDB = "citra-windows-msvc-$GITDATE-$GITREV-debugsymbols.zip" -replace " ", "" + $MSVC_SEVENZIP = "citra-windows-msvc-$GITDATE-$GITREV.7z" -replace " ", "" - 7z a -tzip $MSVC_BUILD_NAME $RELEASE_DIST\* - 7z a $MSVC_SEVENZIP $RELEASE_DIST + # set the build names as env vars so the artifacts can upload them + $env:BUILD_ZIP = $MSVC_BUILD_ZIP + $env:BUILD_SYMBOLS = $MSVC_BUILD_PDB + $env:BUILD_UPDATE = $MSVC_SEVENZIP + + 7z a -tzip $MSVC_BUILD_PDB .\msvc_build\bin\release\*.pdb + rm .\msvc_build\bin\release\*.pdb + + mkdir $RELEASE_DIST + Copy-Item .\msvc_build\bin\release\* -Destination $RELEASE_DIST -Recurse + Copy-Item .\license.txt -Destination $RELEASE_DIST + Copy-Item .\README.md -Destination $RELEASE_DIST + 7z a -tzip $MSVC_BUILD_ZIP $RELEASE_DIST\* + 7z a $MSVC_SEVENZIP $RELEASE_DIST + } else { + $MINGW_BUILD_ZIP = "citra-windows-mingw-$GITDATE-$GITREV.zip" -replace " ", "" + $MINGW_SEVENZIP = "citra-windows-mingw-$GITDATE-$GITREV.7z" -replace " ", "" + # not going to bother adding separate debug symbols for mingw, so just upload a README for it + # if someone wants to add them, change mingw to compile with -g and use objdump and strip to separate the symbols from the binary + $MINGW_NO_DEBUG_SYMBOLS = "README_No_Debug_Symbols.txt" + Set-Content -Path $MINGW_NO_DEBUG_SYMBOLS -Value "This is a workaround for Appveyor since msvc has debug symbols but mingw doesnt" -Force + + # store the build information in env vars so we can use them as artifacts + $env:BUILD_ZIP = $MINGW_BUILD_ZIP + $env:BUILD_SYMBOLS = $MINGW_NO_DEBUG_SYMBOLS + $env:BUILD_UPDATE = $MINGW_SEVENZIP + + $CMAKE_SOURCE_DIR = "$env:APPVEYOR_BUILD_FOLDER" + $CMAKE_BINARY_DIR = "$CMAKE_SOURCE_DIR/mingw_build" + $RELEASE_DIST = $RELEASE_DIST + "-mingw" + + mkdir $RELEASE_DIST + mkdir $RELEASE_DIST/platforms + + # copy the compiled binaries and other release files to the release folder + Get-ChildItem "$CMAKE_BINARY_DIR" -Recurse -Filter "citra*.exe" | Copy-Item -destination $RELEASE_DIST + Copy-Item -path "$CMAKE_SOURCE_DIR/license.txt" -destination $RELEASE_DIST + Copy-Item -path "$CMAKE_SOURCE_DIR/README.md" -destination $RELEASE_DIST + + # copy all the dll dependencies to the release folder + # hardcoded list because we don't build static and determining the list of dlls from the binary is a pain. + $MingwDLLs = "Qt5Core.dll","Qt5Widgets.dll","Qt5Gui.dll","Qt5OpenGL.dll", + # QT dll dependencies + "libbz2-*.dll","libicudt*.dll","libicuin*.dll","libicuuc*.dll","libffi-*.dll", + "libfreetype-*.dll","libglib-*.dll","libgobject-*.dll","libgraphite2.dll","libiconv-*.dll", + "libharfbuzz-*.dll","libintl-*.dll","libpcre-*.dll","libpcre16-*.dll","libpng16-*.dll", + # Runtime/Other dependencies + "libgcc_s_seh-*.dll","libstdc++-*.dll","libwinpthread-*.dll","SDL2.dll","zlib1.dll", + # curl dependencies + "libcurl-*.dll","libnghttp2-*.dll","libeay32.dll","libgmp-*.dll","librtmp-*.dll", + "libgnutls-*.dll","libhogweed-*.dll","libnettle-*.dll","libssh2-*.dll", + "ssleay32.dll","libidn-*.dll","libp11-kit-*.dll","libtasn1-*.dll","libunistring-*.dll" + foreach ($file in $MingwDLLs) { + Copy-Item -path "C:/msys64/mingw64/bin/$file" -force -destination "$RELEASE_DIST" + } + + # copy the qt windows plugin dll to platforms + Copy-Item -path "C:/msys64/mingw64/share/qt5/plugins/platforms/qwindows.dll" -force -destination "$RELEASE_DIST/platforms" + + 7z a -tzip $MINGW_BUILD_ZIP $RELEASE_DIST\* + 7z a $MINGW_SEVENZIP $RELEASE_DIST + } test_script: - - cd build && ctest -VV -C Release && cd .. + - cd %BUILD_TYPE%_build + - ps: | + if ($env:BUILD_TYPE -eq 'msvc') { + ctest -VV -C Release + } else { + C:\msys64\usr\bin\bash.exe -lc "ctest -VV -C Release" + } + - cd .. artifacts: - - path: $(MSVC_BUILD_NAME) - name: msvcbuild + - path: $(BUILD_ZIP) + name: build type: zip - - path: $(MSVC_BUILD_PDB) - name: msvcdebug - type: zip - - path: $(MSVC_SEVENZIP) - name: msvcupdate + - path: $(BUILD_SYMBOLS) + name: debugsymbols + - path: $(BUILD_UPDATE) + name: update deploy: provider: GitHub release: $(appveyor_repo_tag_name) auth_token: secure: "dbpsMC/MgPKWFNJCXpQl4cR8FYhepkPLjgNp/pRMktZ8oLKTqPYErfreaIxb/4P1" - artifact: msvcupdate,msvcbuild + artifact: update,build draft: false prerelease: false on: From 40505bc4fcc5cb1043b90b0acdce9e0093422921 Mon Sep 17 00:00:00 2001 From: DaMan Date: Thu, 31 Aug 2017 18:37:11 -0400 Subject: [PATCH 127/195] Add manifest --- CMakeLists.txt | 4 ++-- dist/citra.manifest | 24 ++++++++++++++++++++++++ src/citra/citra.rc | 8 ++++++++ src/citra_qt/citra-qt.rc | 8 ++++++++ 4 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 dist/citra.manifest diff --git a/CMakeLists.txt b/CMakeLists.txt index ddba04ef93..f8060270ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,8 +129,8 @@ else() set(CMAKE_C_FLAGS_RELEASE "/O2 /GS- /MD" CACHE STRING "" FORCE) set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}" CACHE STRING "" FORCE) - set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG" CACHE STRING "" FORCE) - set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/DEBUG /INCREMENTAL:NO /OPT:REF,ICF" CACHE STRING "" FORCE) + set(CMAKE_EXE_LINKER_FLAGS_DEBUG "/DEBUG /MANIFEST:NO" CACHE STRING "" FORCE) + set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/DEBUG /MANIFEST:NO /INCREMENTAL:NO /OPT:REF,ICF" CACHE STRING "" FORCE) endif() # Set file offset size to 64 bits. diff --git a/dist/citra.manifest b/dist/citra.manifest new file mode 100644 index 0000000000..fd30b656ff --- /dev/null +++ b/dist/citra.manifest @@ -0,0 +1,24 @@ + + + + + + + + + + + + True/PM + true + + + + + + + + + + + \ No newline at end of file diff --git a/src/citra/citra.rc b/src/citra/citra.rc index fea603004a..c490ef302c 100644 --- a/src/citra/citra.rc +++ b/src/citra/citra.rc @@ -1,3 +1,4 @@ +#include "winresrc.h" ///////////////////////////////////////////////////////////////////////////// // // Icon @@ -7,3 +8,10 @@ // remains consistent on all systems. CITRA_ICON ICON "../../dist/citra.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// RT_MANIFEST +// + +1 RT_MANIFEST "../../dist/citra.manifest" diff --git a/src/citra_qt/citra-qt.rc b/src/citra_qt/citra-qt.rc index fea603004a..c490ef302c 100644 --- a/src/citra_qt/citra-qt.rc +++ b/src/citra_qt/citra-qt.rc @@ -1,3 +1,4 @@ +#include "winresrc.h" ///////////////////////////////////////////////////////////////////////////// // // Icon @@ -7,3 +8,10 @@ // remains consistent on all systems. CITRA_ICON ICON "../../dist/citra.ico" + +///////////////////////////////////////////////////////////////////////////// +// +// RT_MANIFEST +// + +1 RT_MANIFEST "../../dist/citra.manifest" From 12fbc8c8dff3265b03cffdd5bb5e6dd6537cd824 Mon Sep 17 00:00:00 2001 From: wwylele Date: Sun, 27 Aug 2017 07:33:27 +0300 Subject: [PATCH 128/195] pica/lighting: only apply Fresnel factor for the last light --- src/video_core/renderer_opengl/gl_shader_gen.cpp | 9 +++++---- src/video_core/swrasterizer/lighting.cpp | 7 ++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_shader_gen.cpp b/src/video_core/renderer_opengl/gl_shader_gen.cpp index 3f390491ad..b5f359da60 100644 --- a/src/video_core/renderer_opengl/gl_shader_gen.cpp +++ b/src/video_core/renderer_opengl/gl_shader_gen.cpp @@ -750,7 +750,8 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) { } // Fresnel - if (lighting.lut_fr.enable && + // Note: only the last entry in the light slots applies the Fresnel factor + if (light_index == lighting.src_num - 1 && lighting.lut_fr.enable && LightingRegs::IsLightingSamplerSupported(lighting.config, LightingRegs::LightingSampler::Fresnel)) { // Lookup fresnel LUT value @@ -759,17 +760,17 @@ static void WriteLighting(std::string& out, const PicaShaderConfig& config) { lighting.lut_fr.type, lighting.lut_fr.abs_input); value = "(" + std::to_string(lighting.lut_fr.scale) + " * " + value + ")"; - // Enabled for difffuse lighting alpha component + // Enabled for diffuse lighting alpha component if (lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::PrimaryAlpha || lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { - out += "diffuse_sum.a *= " + value + ";\n"; + out += "diffuse_sum.a = " + value + ";\n"; } // Enabled for the specular lighting alpha component if (lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::SecondaryAlpha || lighting.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { - out += "specular_sum.a *= " + value + ";\n"; + out += "specular_sum.a = " + value + ";\n"; } } diff --git a/src/video_core/swrasterizer/lighting.cpp b/src/video_core/swrasterizer/lighting.cpp index b389645307..5fa7486117 100644 --- a/src/video_core/swrasterizer/lighting.cpp +++ b/src/video_core/swrasterizer/lighting.cpp @@ -230,7 +230,8 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( d1_lut_value * refl_value * light_config.specular_1.ToVec3f(); // Fresnel - if (lighting.config1.disable_lut_fr == 0 && + // Note: only the last entry in the light slots applies the Fresnel factor + if (light_index == lighting.max_light_index && lighting.config1.disable_lut_fr == 0 && LightingRegs::IsLightingSamplerSupported(lighting.config0.config, LightingRegs::LightingSampler::Fresnel)) { @@ -242,14 +243,14 @@ std::tuple, Math::Vec4> ComputeFragmentsColors( if (lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::PrimaryAlpha || lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { - diffuse_sum.a() *= lut_value; + diffuse_sum.a() = lut_value; } // Enabled for the specular lighting alpha component if (lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::SecondaryAlpha || lighting.config0.fresnel_selector == LightingRegs::LightingFresnelSelector::Both) { - specular_sum.a() *= lut_value; + specular_sum.a() = lut_value; } } From 59a9aaf388b71444116a42fe97a969947230908e Mon Sep 17 00:00:00 2001 From: wwylele Date: Wed, 2 Aug 2017 22:56:44 +0300 Subject: [PATCH 129/195] APT: load different shared font depending on the region --- src/core/hle/service/apt/apt.cpp | 286 ++++++++++++++++--------------- src/core/hle/service/cfg/cfg.cpp | 2 +- src/core/hle/service/cfg/cfg.h | 2 + 3 files changed, 155 insertions(+), 135 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 58d94768c3..8c0ba73f2a 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -19,6 +19,7 @@ #include "core/hle/service/apt/apt_s.h" #include "core/hle/service/apt/apt_u.h" #include "core/hle/service/apt/bcfnt/bcfnt.h" +#include "core/hle/service/cfg/cfg.h" #include "core/hle/service/fs/archive.h" #include "core/hle/service/ptm/ptm.h" #include "core/hle/service/service.h" @@ -198,6 +199,143 @@ void Initialize(Service::Interface* self) { Kernel::g_handle_table.Create(slot_data->parameter_event).Unwrap()); } +static u32 DecompressLZ11(const u8* in, u8* out) { + u32_le decompressed_size; + memcpy(&decompressed_size, in, sizeof(u32)); + in += 4; + + u8 type = decompressed_size & 0xFF; + ASSERT(type == 0x11); + decompressed_size >>= 8; + + u32 current_out_size = 0; + u8 flags = 0, mask = 1; + while (current_out_size < decompressed_size) { + if (mask == 1) { + flags = *(in++); + mask = 0x80; + } else { + mask >>= 1; + } + + if (flags & mask) { + u8 byte1 = *(in++); + u32 length = byte1 >> 4; + u32 offset; + if (length == 0) { + u8 byte2 = *(in++); + u8 byte3 = *(in++); + length = (((byte1 & 0x0F) << 4) | (byte2 >> 4)) + 0x11; + offset = (((byte2 & 0x0F) << 8) | byte3) + 0x1; + } else if (length == 1) { + u8 byte2 = *(in++); + u8 byte3 = *(in++); + u8 byte4 = *(in++); + length = (((byte1 & 0x0F) << 12) | (byte2 << 4) | (byte3 >> 4)) + 0x111; + offset = (((byte3 & 0x0F) << 8) | byte4) + 0x1; + } else { + u8 byte2 = *(in++); + length = (byte1 >> 4) + 0x1; + offset = (((byte1 & 0x0F) << 8) | byte2) + 0x1; + } + + for (u32 i = 0; i < length; i++) { + *out = *(out - offset); + ++out; + } + + current_out_size += length; + } else { + *(out++) = *(in++); + current_out_size++; + } + } + return decompressed_size; +} + +static bool LoadSharedFont() { + u8 font_region_code; + switch (CFG::GetRegionValue()) { + case 4: // CHN + font_region_code = 2; + break; + case 5: // KOR + font_region_code = 3; + break; + case 6: // TWN + font_region_code = 4; + break; + default: // JPN/EUR/USA + font_region_code = 1; + break; + } + + const u64_le shared_font_archive_id_low = 0x0004009b00014002 | ((font_region_code - 1) << 8); + const u64_le shared_font_archive_id_high = 0x00000001ffffff00; + std::vector shared_font_archive_id(16); + std::memcpy(&shared_font_archive_id[0], &shared_font_archive_id_low, sizeof(u64)); + std::memcpy(&shared_font_archive_id[8], &shared_font_archive_id_high, sizeof(u64)); + FileSys::Path archive_path(shared_font_archive_id); + auto archive_result = Service::FS::OpenArchive(Service::FS::ArchiveIdCode::NCCH, archive_path); + if (archive_result.Failed()) + return false; + + std::vector romfs_path(20, 0); // 20-byte all zero path for opening RomFS + FileSys::Path file_path(romfs_path); + FileSys::Mode open_mode = {}; + open_mode.read_flag.Assign(1); + auto file_result = Service::FS::OpenFileFromArchive(*archive_result, file_path, open_mode); + if (file_result.Failed()) + return false; + + auto romfs = std::move(file_result).Unwrap(); + std::vector romfs_buffer(romfs->backend->GetSize()); + romfs->backend->Read(0, romfs_buffer.size(), romfs_buffer.data()); + romfs->backend->Close(); + + const char16_t* file_name[4] = {u"cbf_std.bcfnt.lz", u"cbf_zh-Hans-CN.bcfnt.lz", + u"cbf_ko-Hang-KR.bcfnt.lz", u"cbf_zh-Hant-TW.bcfnt.lz"}; + const u8* font_file = + RomFS::GetFilePointer(romfs_buffer.data(), {file_name[font_region_code - 1]}); + if (font_file == nullptr) + return false; + + struct { + u32_le status; + u32_le region; + u32_le decompressed_size; + INSERT_PADDING_WORDS(0x1D); + } shared_font_header{}; + static_assert(sizeof(shared_font_header) == 0x80, "shared_font_header has incorrect size"); + + shared_font_header.status = 2; // successfully loaded + shared_font_header.region = font_region_code; + shared_font_header.decompressed_size = + DecompressLZ11(font_file, shared_font_mem->GetPointer(0x80)); + std::memcpy(shared_font_mem->GetPointer(), &shared_font_header, sizeof(shared_font_header)); + *shared_font_mem->GetPointer(0x83) = 'U'; // Change the magic from "CFNT" to "CFNU" + + return true; +} + +static bool LoadLegacySharedFont() { + // This is the legacy method to load shared font. + // The expected format is a decrypted, uncompressed BCFNT file with the 0x80 byte header + // generated by the APT:U service. The best way to get is by dumping it from RAM. We've provided + // a homebrew app to do this: https://github.com/citra-emu/3dsutils. Put the resulting file + // "shared_font.bin" in the Citra "sysdata" directory. + std::string filepath = FileUtil::GetUserPath(D_SYSDATA_IDX) + SHARED_FONT; + + FileUtil::CreateFullPath(filepath); // Create path if not already created + FileUtil::IOFile file(filepath, "rb"); + if (file.IsOpen()) { + file.ReadBytes(shared_font_mem->GetPointer(), file.GetSize()); + return true; + } + + return false; +} + void GetSharedFont(Service::Interface* self) { IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x44, 0, 0); // 0x00440000 IPC::RequestBuilder rb = rp.MakeBuilder(2, 2); @@ -206,11 +344,20 @@ void GetSharedFont(Service::Interface* self) { Core::Telemetry().AddField(Telemetry::FieldType::Session, "RequiresSharedFont", true); if (!shared_font_loaded) { - LOG_ERROR(Service_APT, "shared font file missing - go dump it from your 3ds"); - rb.Push(-1); // TODO: Find the right error code - rb.Skip(1 + 2, true); - Core::System::GetInstance().SetStatus(Core::System::ResultStatus::ErrorSharedFont); - return; + // On real 3DS, font loading happens on booting. However, we load it on demand to coordinate + // with CFG region auto configuration, which happens later than APT initialization. + if (LoadSharedFont()) { + shared_font_loaded = true; + } else if (LoadLegacySharedFont()) { + LOG_WARNING(Service_APT, "Loaded shared font by legacy method"); + shared_font_loaded = true; + } else { + LOG_ERROR(Service_APT, "shared font file missing - go dump it from your 3ds"); + rb.Push(-1); // TODO: Find the right error code + rb.Skip(1 + 2, true); + Core::System::GetInstance().SetStatus(Core::System::ResultStatus::ErrorSharedFont); + return; + } } // The shared font has to be relocated to the new address before being passed to the @@ -863,125 +1010,6 @@ void CheckNew3DS(Service::Interface* self) { LOG_WARNING(Service_APT, "(STUBBED) called"); } -static u32 DecompressLZ11(const u8* in, u8* out) { - u32_le decompressed_size; - memcpy(&decompressed_size, in, sizeof(u32)); - in += 4; - - u8 type = decompressed_size & 0xFF; - ASSERT(type == 0x11); - decompressed_size >>= 8; - - u32 current_out_size = 0; - u8 flags = 0, mask = 1; - while (current_out_size < decompressed_size) { - if (mask == 1) { - flags = *(in++); - mask = 0x80; - } else { - mask >>= 1; - } - - if (flags & mask) { - u8 byte1 = *(in++); - u32 length = byte1 >> 4; - u32 offset; - if (length == 0) { - u8 byte2 = *(in++); - u8 byte3 = *(in++); - length = (((byte1 & 0x0F) << 4) | (byte2 >> 4)) + 0x11; - offset = (((byte2 & 0x0F) << 8) | byte3) + 0x1; - } else if (length == 1) { - u8 byte2 = *(in++); - u8 byte3 = *(in++); - u8 byte4 = *(in++); - length = (((byte1 & 0x0F) << 12) | (byte2 << 4) | (byte3 >> 4)) + 0x111; - offset = (((byte3 & 0x0F) << 8) | byte4) + 0x1; - } else { - u8 byte2 = *(in++); - length = (byte1 >> 4) + 0x1; - offset = (((byte1 & 0x0F) << 8) | byte2) + 0x1; - } - - for (u32 i = 0; i < length; i++) { - *out = *(out - offset); - ++out; - } - - current_out_size += length; - } else { - *(out++) = *(in++); - current_out_size++; - } - } - return decompressed_size; -} - -static bool LoadSharedFont() { - // TODO (wwylele): load different font archive for region CHN/KOR/TWN - const u64_le shared_font_archive_id_low = 0x0004009b00014002; - const u64_le shared_font_archive_id_high = 0x00000001ffffff00; - std::vector shared_font_archive_id(16); - std::memcpy(&shared_font_archive_id[0], &shared_font_archive_id_low, sizeof(u64)); - std::memcpy(&shared_font_archive_id[8], &shared_font_archive_id_high, sizeof(u64)); - FileSys::Path archive_path(shared_font_archive_id); - auto archive_result = Service::FS::OpenArchive(Service::FS::ArchiveIdCode::NCCH, archive_path); - if (archive_result.Failed()) - return false; - - std::vector romfs_path(20, 0); // 20-byte all zero path for opening RomFS - FileSys::Path file_path(romfs_path); - FileSys::Mode open_mode = {}; - open_mode.read_flag.Assign(1); - auto file_result = Service::FS::OpenFileFromArchive(*archive_result, file_path, open_mode); - if (file_result.Failed()) - return false; - - auto romfs = std::move(file_result).Unwrap(); - std::vector romfs_buffer(romfs->backend->GetSize()); - romfs->backend->Read(0, romfs_buffer.size(), romfs_buffer.data()); - romfs->backend->Close(); - - const u8* font_file = RomFS::GetFilePointer(romfs_buffer.data(), {u"cbf_std.bcfnt.lz"}); - if (font_file == nullptr) - return false; - - struct { - u32_le status; - u32_le region; - u32_le decompressed_size; - INSERT_PADDING_WORDS(0x1D); - } shared_font_header{}; - static_assert(sizeof(shared_font_header) == 0x80, "shared_font_header has incorrect size"); - - shared_font_header.status = 2; // successfully loaded - shared_font_header.region = 1; // region JPN/EUR/USA - shared_font_header.decompressed_size = - DecompressLZ11(font_file, shared_font_mem->GetPointer(0x80)); - std::memcpy(shared_font_mem->GetPointer(), &shared_font_header, sizeof(shared_font_header)); - *shared_font_mem->GetPointer(0x83) = 'U'; // Change the magic from "CFNT" to "CFNU" - - return true; -} - -static bool LoadLegacySharedFont() { - // This is the legacy method to load shared font. - // The expected format is a decrypted, uncompressed BCFNT file with the 0x80 byte header - // generated by the APT:U service. The best way to get is by dumping it from RAM. We've provided - // a homebrew app to do this: https://github.com/citra-emu/3dsutils. Put the resulting file - // "shared_font.bin" in the Citra "sysdata" directory. - std::string filepath = FileUtil::GetUserPath(D_SYSDATA_IDX) + SHARED_FONT; - - FileUtil::CreateFullPath(filepath); // Create path if not already created - FileUtil::IOFile file(filepath, "rb"); - if (file.IsOpen()) { - file.ReadBytes(shared_font_mem->GetPointer(), file.GetSize()); - return true; - } - - return false; -} - void Init() { AddService(new APT_A_Interface); AddService(new APT_S_Interface); @@ -995,16 +1023,6 @@ void Init() { MemoryPermission::ReadWrite, MemoryPermission::Read, 0, Kernel::MemoryRegion::SYSTEM, "APT:SharedFont"); - if (LoadSharedFont()) { - shared_font_loaded = true; - } else if (LoadLegacySharedFont()) { - LOG_WARNING(Service_APT, "Loaded shared font by legacy method"); - shared_font_loaded = true; - } else { - LOG_WARNING(Service_APT, "Unable to load shared font"); - shared_font_loaded = false; - } - lock = Kernel::Mutex::Create(false, "APT_U:Lock"); cpu_percent = 0; diff --git a/src/core/hle/service/cfg/cfg.cpp b/src/core/hle/service/cfg/cfg.cpp index 3dbeb27cc2..f26a1f65fe 100644 --- a/src/core/hle/service/cfg/cfg.cpp +++ b/src/core/hle/service/cfg/cfg.cpp @@ -168,7 +168,7 @@ void GetCountryCodeID(Service::Interface* self) { cmd_buff[2] = country_code_id; } -static u32 GetRegionValue() { +u32 GetRegionValue() { if (Settings::values.region_value == Settings::REGION_VALUE_AUTO_SELECT) return preferred_region_code; diff --git a/src/core/hle/service/cfg/cfg.h b/src/core/hle/service/cfg/cfg.h index 1659ebf32d..282b6936b4 100644 --- a/src/core/hle/service/cfg/cfg.h +++ b/src/core/hle/service/cfg/cfg.h @@ -101,6 +101,8 @@ void GetCountryCodeString(Service::Interface* self); */ void GetCountryCodeID(Service::Interface* self); +u32 GetRegionValue(); + /** * CFG::SecureInfoGetRegion service function * Inputs: From 79f177c6d28a2e7644e152a97639f66272d9f012 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sun, 3 Sep 2017 11:26:10 -0600 Subject: [PATCH 130/195] Fix icon for citra qt --- src/citra_qt/citra-qt.rc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/citra_qt/citra-qt.rc b/src/citra_qt/citra-qt.rc index c490ef302c..a48a9440dc 100644 --- a/src/citra_qt/citra-qt.rc +++ b/src/citra_qt/citra-qt.rc @@ -6,7 +6,9 @@ // Icon with lowest ID value placed first to ensure application icon // remains consistent on all systems. -CITRA_ICON ICON "../../dist/citra.ico" +// QT requires that the default application icon is named IDI_ICON1 + +IDI_ICON1 ICON "../../dist/citra.ico" ///////////////////////////////////////////////////////////////////////////// From 589babbf7477423457dddbefbbb29623fa5c0624 Mon Sep 17 00:00:00 2001 From: mailwl Date: Sat, 12 Aug 2017 11:10:04 +0300 Subject: [PATCH 131/195] Mii Selector Applet: update Mii structures --- src/core/hle/applets/mii_selector.cpp | 6 +-- src/core/hle/applets/mii_selector.h | 57 ++++++++++++--------------- 2 files changed, 29 insertions(+), 34 deletions(-) diff --git a/src/core/hle/applets/mii_selector.cpp b/src/core/hle/applets/mii_selector.cpp index 705859f1e2..f225c23a58 100644 --- a/src/core/hle/applets/mii_selector.cpp +++ b/src/core/hle/applets/mii_selector.cpp @@ -66,7 +66,7 @@ ResultCode MiiSelector::StartImpl(const Service::APT::AppletStartupParameter& pa // continue. MiiResult result; memset(&result, 0, sizeof(result)); - result.result_code = 0; + result.return_code = 0; // Let the application know that we're closing Service::APT::MessageParameter message; @@ -82,5 +82,5 @@ ResultCode MiiSelector::StartImpl(const Service::APT::AppletStartupParameter& pa } void MiiSelector::Update() {} -} -} // namespace +} // namespace Applets +} // namespace HLE diff --git a/src/core/hle/applets/mii_selector.h b/src/core/hle/applets/mii_selector.h index ec00e29d23..69db401d08 100644 --- a/src/core/hle/applets/mii_selector.h +++ b/src/core/hle/applets/mii_selector.h @@ -16,51 +16,46 @@ namespace HLE { namespace Applets { struct MiiConfig { - u8 unk_000; - u8 unk_001; - u8 unk_002; - u8 unk_003; - u8 unk_004; + u8 cancel_button_flag; + u8 enable_guest_mii_flag; + u8 show_on_top_screen_flag; + INSERT_PADDING_BYTES(5); + u16 title[0x40]; + INSERT_PADDING_BYTES(4); + u8 show_guest_miis_flag; INSERT_PADDING_BYTES(3); - u16 unk_008; - INSERT_PADDING_BYTES(0x82); - u8 unk_08C; - INSERT_PADDING_BYTES(3); - u16 unk_090; + u32 initially_selected_mii_index; + u8 guest_mii_whitelist[6]; + u8 user_mii_whitelist[0x64]; INSERT_PADDING_BYTES(2); - u32 unk_094; - u16 unk_098; - u8 unk_09A[0x64]; - u8 unk_0FE; - u8 unk_0FF; - u32 unk_100; + u32 magic_value; }; - static_assert(sizeof(MiiConfig) == 0x104, "MiiConfig structure has incorrect size"); #define ASSERT_REG_POSITION(field_name, position) \ static_assert(offsetof(MiiConfig, field_name) == position, \ "Field " #field_name " has invalid position") -ASSERT_REG_POSITION(unk_008, 0x08); -ASSERT_REG_POSITION(unk_08C, 0x8C); -ASSERT_REG_POSITION(unk_090, 0x90); -ASSERT_REG_POSITION(unk_094, 0x94); -ASSERT_REG_POSITION(unk_0FE, 0xFE); +ASSERT_REG_POSITION(title, 0x08); +ASSERT_REG_POSITION(show_guest_miis_flag, 0x8C); +ASSERT_REG_POSITION(initially_selected_mii_index, 0x90); +ASSERT_REG_POSITION(guest_mii_whitelist, 0x94); #undef ASSERT_REG_POSITION struct MiiResult { - u32 result_code; - u8 unk_04; - INSERT_PADDING_BYTES(7); - u8 unk_0C[0x60]; - u8 unk_6C[0x16]; + u32 return_code; + u32 guest_mii_selected_flag; + u32 selected_guest_mii_index; + // TODO(mailwl): expand to Mii Format structure: https://www.3dbrew.org/wiki/Mii + u8 selected_mii_data[0x5C]; INSERT_PADDING_BYTES(2); + u16 mii_data_checksum; + u16 guest_mii_name[0xC]; }; static_assert(sizeof(MiiResult) == 0x84, "MiiResult structure has incorrect size"); #define ASSERT_REG_POSITION(field_name, position) \ static_assert(offsetof(MiiResult, field_name) == position, \ "Field " #field_name " has invalid position") -ASSERT_REG_POSITION(unk_0C, 0x0C); -ASSERT_REG_POSITION(unk_6C, 0x6C); +ASSERT_REG_POSITION(selected_mii_data, 0x0C); +ASSERT_REG_POSITION(guest_mii_name, 0x6C); #undef ASSERT_REG_POSITION class MiiSelector final : public Applet { @@ -79,5 +74,5 @@ private: MiiConfig config; }; -} -} // namespace +} // namespace Applets +} // namespace HLE From 11f2eff17df600c57aba35384c9f82490368735d Mon Sep 17 00:00:00 2001 From: mailwl Date: Mon, 4 Sep 2017 12:15:15 +0300 Subject: [PATCH 132/195] Remove _flag in var names --- src/core/hle/applets/mii_selector.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/core/hle/applets/mii_selector.h b/src/core/hle/applets/mii_selector.h index 69db401d08..136ce8948a 100644 --- a/src/core/hle/applets/mii_selector.h +++ b/src/core/hle/applets/mii_selector.h @@ -16,13 +16,13 @@ namespace HLE { namespace Applets { struct MiiConfig { - u8 cancel_button_flag; - u8 enable_guest_mii_flag; - u8 show_on_top_screen_flag; + u8 enable_cancel_button; + u8 enable_guest_mii; + u8 show_on_top_screen; INSERT_PADDING_BYTES(5); u16 title[0x40]; INSERT_PADDING_BYTES(4); - u8 show_guest_miis_flag; + u8 show_guest_miis; INSERT_PADDING_BYTES(3); u32 initially_selected_mii_index; u8 guest_mii_whitelist[6]; @@ -35,14 +35,14 @@ static_assert(sizeof(MiiConfig) == 0x104, "MiiConfig structure has incorrect siz static_assert(offsetof(MiiConfig, field_name) == position, \ "Field " #field_name " has invalid position") ASSERT_REG_POSITION(title, 0x08); -ASSERT_REG_POSITION(show_guest_miis_flag, 0x8C); +ASSERT_REG_POSITION(show_guest_miis, 0x8C); ASSERT_REG_POSITION(initially_selected_mii_index, 0x90); ASSERT_REG_POSITION(guest_mii_whitelist, 0x94); #undef ASSERT_REG_POSITION struct MiiResult { u32 return_code; - u32 guest_mii_selected_flag; + u32 is_guest_mii_selected; u32 selected_guest_mii_index; // TODO(mailwl): expand to Mii Format structure: https://www.3dbrew.org/wiki/Mii u8 selected_mii_data[0x5C]; From ef8925b7acfe03cb83963e3f9ec4592ae308f4ee Mon Sep 17 00:00:00 2001 From: James Rowe Date: Tue, 5 Sep 2017 18:57:47 -0600 Subject: [PATCH 133/195] Remove excess debug dlls for mingw build --- appveyor.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/appveyor.yml b/appveyor.yml index 1c390cdd53..ec9ca3747f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -131,6 +131,12 @@ after_build: foreach ($file in $MingwDLLs) { Copy-Item -path "C:/msys64/mingw64/bin/$file" -force -destination "$RELEASE_DIST" } + # the above list copies a few extra debug dlls that aren't needed (thanks globbing patterns!) + # so we can remove them by hardcoding another list of extra dlls to remove + $DebugDLLs = "libicudtd*.dll","libicuind*.dll","libicuucd*.dll" + foreach ($file in $DebugDLLs) { + Remove-Item -path "$RELEASE_DIST/$file" + } # copy the qt windows plugin dll to platforms Copy-Item -path "C:/msys64/mingw64/share/qt5/plugins/platforms/qwindows.dll" -force -destination "$RELEASE_DIST/platforms" From 0c55bed0477fc42dd95b512cbce741723a8878a6 Mon Sep 17 00:00:00 2001 From: B3n30 Date: Sat, 9 Sep 2017 21:21:53 +0200 Subject: [PATCH 134/195] trvis_OSX: build with system curl --- .travis-build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis-build.sh b/.travis-build.sh index 64f5aed946..bb4e6fc47e 100755 --- a/.travis-build.sh +++ b/.travis-build.sh @@ -52,7 +52,7 @@ elif [ "$TRAVIS_OS_NAME" = "osx" ]; then export Qt5_DIR=$(brew --prefix)/opt/qt5 mkdir build && cd build - cmake .. -GXcode + cmake .. -DUSE_SYSTEM_CURL=ON -GXcode xcodebuild -configuration Release ctest -VV -C Release From 6d2734a074f44a24129db850339677d8d7b436aa Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 21 Jul 2017 21:17:57 -0500 Subject: [PATCH 135/195] Kernel/Memory: Give each Process its own page table. The loader is in charge of setting the newly created process's page table as the main one during the loading process. --- src/core/core.cpp | 1 - src/core/hle/kernel/vm_manager.cpp | 13 +++-- src/core/hle/kernel/vm_manager.h | 6 ++- src/core/loader/3dsx.cpp | 1 + src/core/loader/elf.cpp | 1 + src/core/loader/ncch.cpp | 1 + src/core/memory.cpp | 87 +++++------------------------- src/core/memory.h | 60 ++++++++++++++++++++- src/core/memory_setup.h | 10 ++-- 9 files changed, 93 insertions(+), 87 deletions(-) diff --git a/src/core/core.cpp b/src/core/core.cpp index 5332318cff..59b8768e71 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -137,7 +137,6 @@ void System::Reschedule() { } System::ResultStatus System::Init(EmuWindow* emu_window, u32 system_mode) { - Memory::InitMemoryMap(); LOG_DEBUG(HW_Memory, "initialized OK"); if (Settings::values.use_cpu_jit) { diff --git a/src/core/hle/kernel/vm_manager.cpp b/src/core/hle/kernel/vm_manager.cpp index cef1f7fa83..7a007c0656 100644 --- a/src/core/hle/kernel/vm_manager.cpp +++ b/src/core/hle/kernel/vm_manager.cpp @@ -56,6 +56,10 @@ void VMManager::Reset() { initial_vma.size = MAX_ADDRESS; vma_map.emplace(initial_vma.base, initial_vma); + page_table.pointers.fill(nullptr); + page_table.attributes.fill(Memory::PageType::Unmapped); + page_table.cached_res_count.fill(0); + UpdatePageTableForVMA(initial_vma); } @@ -328,16 +332,17 @@ VMManager::VMAIter VMManager::MergeAdjacent(VMAIter iter) { void VMManager::UpdatePageTableForVMA(const VirtualMemoryArea& vma) { switch (vma.type) { case VMAType::Free: - Memory::UnmapRegion(vma.base, vma.size); + Memory::UnmapRegion(page_table, vma.base, vma.size); break; case VMAType::AllocatedMemoryBlock: - Memory::MapMemoryRegion(vma.base, vma.size, vma.backing_block->data() + vma.offset); + Memory::MapMemoryRegion(page_table, vma.base, vma.size, + vma.backing_block->data() + vma.offset); break; case VMAType::BackingMemory: - Memory::MapMemoryRegion(vma.base, vma.size, vma.backing_memory); + Memory::MapMemoryRegion(page_table, vma.base, vma.size, vma.backing_memory); break; case VMAType::MMIO: - Memory::MapIoRegion(vma.base, vma.size, vma.mmio_handler); + Memory::MapIoRegion(page_table, vma.base, vma.size, vma.mmio_handler); break; } } diff --git a/src/core/hle/kernel/vm_manager.h b/src/core/hle/kernel/vm_manager.h index 38e0d74d0d..1302527bb9 100644 --- a/src/core/hle/kernel/vm_manager.h +++ b/src/core/hle/kernel/vm_manager.h @@ -9,6 +9,7 @@ #include #include "common/common_types.h" #include "core/hle/result.h" +#include "core/memory.h" #include "core/mmio.h" namespace Kernel { @@ -102,7 +103,6 @@ struct VirtualMemoryArea { * - http://duartes.org/gustavo/blog/post/page-cache-the-affair-between-memory-and-files/ */ class VMManager final { - // TODO(yuriks): Make page tables switchable to support multiple VMManagers public: /** * The maximum amount of address space managed by the kernel. Addresses above this are never @@ -184,6 +184,10 @@ public: /// Dumps the address space layout to the log, for debugging void LogLayout(Log::Level log_level) const; + /// Each VMManager has its own page table, which is set as the main one when the owning process + /// is scheduled. + Memory::PageTable page_table; + private: using VMAIter = decltype(vma_map)::iterator; diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp index 74e3364874..69cdc0867e 100644 --- a/src/core/loader/3dsx.cpp +++ b/src/core/loader/3dsx.cpp @@ -270,6 +270,7 @@ ResultStatus AppLoader_THREEDSX::Load() { Kernel::g_current_process = Kernel::Process::Create(std::move(codeset)); Kernel::g_current_process->svc_access_mask.set(); Kernel::g_current_process->address_mappings = default_address_mappings; + Memory::current_page_table = &Kernel::g_current_process->vm_manager.page_table; // Attach the default resource limit (APPLICATION) to the process Kernel::g_current_process->resource_limit = diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp index cfcde91673..2f27606a18 100644 --- a/src/core/loader/elf.cpp +++ b/src/core/loader/elf.cpp @@ -397,6 +397,7 @@ ResultStatus AppLoader_ELF::Load() { Kernel::g_current_process = Kernel::Process::Create(std::move(codeset)); Kernel::g_current_process->svc_access_mask.set(); Kernel::g_current_process->address_mappings = default_address_mappings; + Memory::current_page_table = &Kernel::g_current_process->vm_manager.page_table; // Attach the default resource limit (APPLICATION) to the process Kernel::g_current_process->resource_limit = diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index 7aff7f29b3..79ea501471 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -172,6 +172,7 @@ ResultStatus AppLoader_NCCH::LoadExec() { codeset->memory = std::make_shared>(std::move(code)); Kernel::g_current_process = Kernel::Process::Create(std::move(codeset)); + Memory::current_page_table = &Kernel::g_current_process->vm_manager.page_table; // Attach a resource limit to the process based on the resource limit category Kernel::g_current_process->resource_limit = diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 65649d9d76..ea46b6ead8 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -11,75 +11,18 @@ #include "core/hle/kernel/process.h" #include "core/memory.h" #include "core/memory_setup.h" -#include "core/mmio.h" #include "video_core/renderer_base.h" #include "video_core/video_core.h" namespace Memory { -enum class PageType { - /// Page is unmapped and should cause an access error. - Unmapped, - /// Page is mapped to regular memory. This is the only type you can get pointers to. - Memory, - /// Page is mapped to regular memory, but also needs to check for rasterizer cache flushing and - /// invalidation - RasterizerCachedMemory, - /// Page is mapped to a I/O region. Writing and reading to this page is handled by functions. - Special, - /// Page is mapped to a I/O region, but also needs to check for rasterizer cache flushing and - /// invalidation - RasterizerCachedSpecial, -}; - -struct SpecialRegion { - VAddr base; - u32 size; - MMIORegionPointer handler; -}; - -/** - * A (reasonably) fast way of allowing switchable and remappable process address spaces. It loosely - * mimics the way a real CPU page table works, but instead is optimized for minimal decoding and - * fetching requirements when accessing. In the usual case of an access to regular memory, it only - * requires an indexed fetch and a check for NULL. - */ -struct PageTable { - /** - * Array of memory pointers backing each page. An entry can only be non-null if the - * corresponding entry in the `attributes` array is of type `Memory`. - */ - std::array pointers; - - /** - * Contains MMIO handlers that back memory regions whose entries in the `attribute` array is of - * type `Special`. - */ - std::vector special_regions; - - /** - * Array of fine grained page attributes. If it is set to any value other than `Memory`, then - * the corresponding entry in `pointers` MUST be set to null. - */ - std::array attributes; - - /** - * Indicates the number of externally cached resources touching a page that should be - * flushed before the memory is accessed - */ - std::array cached_res_count; -}; - -/// Singular page table used for the singleton process -static PageTable main_page_table; -/// Currently active page table -static PageTable* current_page_table = &main_page_table; +PageTable* current_page_table = nullptr; std::array* GetCurrentPageTablePointers() { return ¤t_page_table->pointers; } -static void MapPages(u32 base, u32 size, u8* memory, PageType type) { +static void MapPages(PageTable& page_table, u32 base, u32 size, u8* memory, PageType type) { LOG_DEBUG(HW_Memory, "Mapping %p onto %08X-%08X", memory, base * PAGE_SIZE, (base + size) * PAGE_SIZE); @@ -90,9 +33,9 @@ static void MapPages(u32 base, u32 size, u8* memory, PageType type) { while (base != end) { ASSERT_MSG(base < PAGE_TABLE_NUM_ENTRIES, "out of range mapping at %08X", base); - current_page_table->attributes[base] = type; - current_page_table->pointers[base] = memory; - current_page_table->cached_res_count[base] = 0; + page_table.attributes[base] = type; + page_table.pointers[base] = memory; + page_table.cached_res_count[base] = 0; base += 1; if (memory != nullptr) @@ -100,30 +43,24 @@ static void MapPages(u32 base, u32 size, u8* memory, PageType type) { } } -void InitMemoryMap() { - main_page_table.pointers.fill(nullptr); - main_page_table.attributes.fill(PageType::Unmapped); - main_page_table.cached_res_count.fill(0); -} - -void MapMemoryRegion(VAddr base, u32 size, u8* target) { +void MapMemoryRegion(PageTable& page_table, VAddr base, u32 size, u8* target) { ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size); ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base); - MapPages(base / PAGE_SIZE, size / PAGE_SIZE, target, PageType::Memory); + MapPages(page_table, base / PAGE_SIZE, size / PAGE_SIZE, target, PageType::Memory); } -void MapIoRegion(VAddr base, u32 size, MMIORegionPointer mmio_handler) { +void MapIoRegion(PageTable& page_table, VAddr base, u32 size, MMIORegionPointer mmio_handler) { ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size); ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base); - MapPages(base / PAGE_SIZE, size / PAGE_SIZE, nullptr, PageType::Special); + MapPages(page_table, base / PAGE_SIZE, size / PAGE_SIZE, nullptr, PageType::Special); - current_page_table->special_regions.emplace_back(SpecialRegion{base, size, mmio_handler}); + page_table.special_regions.emplace_back(SpecialRegion{base, size, mmio_handler}); } -void UnmapRegion(VAddr base, u32 size) { +void UnmapRegion(PageTable& page_table, VAddr base, u32 size) { ASSERT_MSG((size & PAGE_MASK) == 0, "non-page aligned size: %08X", size); ASSERT_MSG((base & PAGE_MASK) == 0, "non-page aligned base: %08X", base); - MapPages(base / PAGE_SIZE, size / PAGE_SIZE, nullptr, PageType::Unmapped); + MapPages(page_table, base / PAGE_SIZE, size / PAGE_SIZE, nullptr, PageType::Unmapped); } /** diff --git a/src/core/memory.h b/src/core/memory.h index c8c56babd9..859a142022 100644 --- a/src/core/memory.h +++ b/src/core/memory.h @@ -7,8 +7,10 @@ #include #include #include +#include #include #include "common/common_types.h" +#include "core/mmio.h" namespace Memory { @@ -21,6 +23,59 @@ const u32 PAGE_MASK = PAGE_SIZE - 1; const int PAGE_BITS = 12; const size_t PAGE_TABLE_NUM_ENTRIES = 1 << (32 - PAGE_BITS); +enum class PageType { + /// Page is unmapped and should cause an access error. + Unmapped, + /// Page is mapped to regular memory. This is the only type you can get pointers to. + Memory, + /// Page is mapped to regular memory, but also needs to check for rasterizer cache flushing and + /// invalidation + RasterizerCachedMemory, + /// Page is mapped to a I/O region. Writing and reading to this page is handled by functions. + Special, + /// Page is mapped to a I/O region, but also needs to check for rasterizer cache flushing and + /// invalidation + RasterizerCachedSpecial, +}; + +struct SpecialRegion { + VAddr base; + u32 size; + MMIORegionPointer handler; +}; + +/** + * A (reasonably) fast way of allowing switchable and remappable process address spaces. It loosely + * mimics the way a real CPU page table works, but instead is optimized for minimal decoding and + * fetching requirements when accessing. In the usual case of an access to regular memory, it only + * requires an indexed fetch and a check for NULL. + */ +struct PageTable { + /** + * Array of memory pointers backing each page. An entry can only be non-null if the + * corresponding entry in the `attributes` array is of type `Memory`. + */ + std::array pointers; + + /** + * Contains MMIO handlers that back memory regions whose entries in the `attribute` array is of + * type `Special`. + */ + std::vector special_regions; + + /** + * Array of fine grained page attributes. If it is set to any value other than `Memory`, then + * the corresponding entry in `pointers` MUST be set to null. + */ + std::array attributes; + + /** + * Indicates the number of externally cached resources touching a page that should be + * flushed before the memory is accessed + */ + std::array cached_res_count; +}; + /// Physical memory regions as seen from the ARM11 enum : PAddr { /// IO register area @@ -126,6 +181,9 @@ enum : VAddr { NEW_LINEAR_HEAP_VADDR_END = NEW_LINEAR_HEAP_VADDR + NEW_LINEAR_HEAP_SIZE, }; +/// Currently active page table +extern PageTable* current_page_table; + bool IsValidVirtualAddress(const VAddr addr); bool IsValidPhysicalAddress(const PAddr addr); @@ -209,4 +267,4 @@ void RasterizerFlushVirtualRegion(VAddr start, u32 size, FlushMode mode); * retrieve the current page table for that purpose. */ std::array* GetCurrentPageTablePointers(); -} +} // namespace Memory diff --git a/src/core/memory_setup.h b/src/core/memory_setup.h index 3fdf3a87dc..c58baa50b6 100644 --- a/src/core/memory_setup.h +++ b/src/core/memory_setup.h @@ -9,24 +9,24 @@ namespace Memory { -void InitMemoryMap(); - /** * Maps an allocated buffer onto a region of the emulated process address space. * + * @param page_table The page table of the emulated process. * @param base The address to start mapping at. Must be page-aligned. * @param size The amount of bytes to map. Must be page-aligned. * @param target Buffer with the memory backing the mapping. Must be of length at least `size`. */ -void MapMemoryRegion(VAddr base, u32 size, u8* target); +void MapMemoryRegion(PageTable& page_table, VAddr base, u32 size, u8* target); /** * Maps a region of the emulated process address space as a IO region. + * @param page_table The page table of the emulated process. * @param base The address to start mapping at. Must be page-aligned. * @param size The amount of bytes to map. Must be page-aligned. * @param mmio_handler The handler that backs the mapping. */ -void MapIoRegion(VAddr base, u32 size, MMIORegionPointer mmio_handler); +void MapIoRegion(PageTable& page_table, VAddr base, u32 size, MMIORegionPointer mmio_handler); -void UnmapRegion(VAddr base, u32 size); +void UnmapRegion(PageTable& page_table, VAddr base, u32 size); } From c34ec5e77cd9e83fcf5c929f3951557d5269b7a6 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 21 Jul 2017 21:28:03 -0500 Subject: [PATCH 136/195] Kernel/Memory: Switch the current page table when a new process is scheduled. --- src/core/hle/kernel/thread.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index f5f2eb2f7f..b7f094f465 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -178,8 +178,18 @@ static void SwitchContext(Thread* new_thread) { Core::CPU().LoadContext(new_thread->context); Core::CPU().SetCP15Register(CP15_THREAD_URO, new_thread->GetTLSAddress()); + + if (!previous_thread || previous_thread->owner_process != current_thread->owner_process) { + Kernel::g_current_process = current_thread->owner_process; + Memory::current_page_table = &Kernel::g_current_process->vm_manager.page_table; + // We have switched processes and thus, page tables, clear the instruction cache so we + // don't keep stale data from the previous process. + Core::CPU().ClearInstructionCache(); + } } else { current_thread = nullptr; + // Note: We do not reset the current process and current page table when idling because + // technically we haven't changed processes, our threads are just paused. } } From 9e847b754933f09bdf19be0dc45fc32a65052965 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 9 Sep 2017 11:24:13 -0600 Subject: [PATCH 137/195] Build: Enable SSL in mingw by linking against WinSSL The mingw builds aren't submitting telemetry because the curl library they are linked against is configured to use openSSL and openSSL looks for the certificates in the users home folder. This keeps it from contacting web services because it can't communicate over SSL. This commit adds a download in mingw builds that will download a precompiled curl for mingw linked against winssl and sspi. --- CMakeLists.txt | 28 ++++++++++------------------ CMakeModules/DownloadExternals.cmake | 18 ++++++++++++++++++ appveyor.yml | 11 ++++------- externals/CMakeLists.txt | 19 +++++++++++++++++-- 4 files changed, 49 insertions(+), 27 deletions(-) create mode 100644 CMakeModules/DownloadExternals.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f8060270ef..d9c2f78a25 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.6) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/externals/cmake-modules") +include(DownloadExternals) project(citra) @@ -12,6 +13,15 @@ option(ENABLE_QT "Enable the Qt frontend" ON) option(CITRA_USE_BUNDLED_QT "Download bundled Qt binaries" OFF) option(ENABLE_WEB_SERVICE "Enable web services (telemetry, etc.)" ON) +option(CITRA_USE_BUNDLED_CURL "FOR MINGW ONLY: Download curl configured against winssl instead of openssl" OFF) +if (ENABLE_WEB_SERVICE AND CITRA_USE_BUNDLED_CURL AND WINDOWS AND MSVC) + message("Turning off use bundled curl as msvc can compile curl on cpr") + SET(CITRA_USE_BUNDLED_CURL OFF CACHE BOOL "" FORCE) +endif() +if (ENABLE_WEB_SERVICE AND NOT CITRA_USE_BUNDLED_CURL AND MINGW) + message(AUTHOR_WARNING "Turning on CITRA_USE_BUNDLED_CURL. Override it only if you know what you are doing.") + SET(CITRA_USE_BUNDLED_CURL ON CACHE BOOL "" FORCE) +endif() if(NOT EXISTS ${CMAKE_SOURCE_DIR}/.git/hooks/pre-commit) message(STATUS "Copying pre-commit hook") @@ -151,24 +161,6 @@ set_property(DIRECTORY APPEND PROPERTY # System imported libraries # ====================== -# This function downloads a binary library package from our external repo. -# Params: -# remote_path: path to the file to download, relative to the remote repository root -# prefix_var: name of a variable which will be set with the path to the extracted contents -function(download_bundled_external remote_path lib_name prefix_var) - set(prefix "${CMAKE_BINARY_DIR}/externals/${lib_name}") - if (NOT EXISTS "${prefix}") - message(STATUS "Downloading binaries for ${lib_name}...") - file(DOWNLOAD - https://github.com/citra-emu/ext-windows-bin/raw/master/${remote_path}${lib_name}.7z - "${CMAKE_BINARY_DIR}/externals/${lib_name}.7z" SHOW_PROGRESS) - execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${CMAKE_BINARY_DIR}/externals/${lib_name}.7z" - WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals") - endif() - message(STATUS "Using bundled binaries at ${prefix}") - set(${prefix_var} "${prefix}" PARENT_SCOPE) -endfunction() - find_package(PNG QUIET) if (NOT PNG_FOUND) message(STATUS "libpng not found. Some debugging features have been disabled.") diff --git a/CMakeModules/DownloadExternals.cmake b/CMakeModules/DownloadExternals.cmake new file mode 100644 index 0000000000..138a15d5a0 --- /dev/null +++ b/CMakeModules/DownloadExternals.cmake @@ -0,0 +1,18 @@ + +# This function downloads a binary library package from our external repo. +# Params: +# remote_path: path to the file to download, relative to the remote repository root +# prefix_var: name of a variable which will be set with the path to the extracted contents +function(download_bundled_external remote_path lib_name prefix_var) +set(prefix "${CMAKE_BINARY_DIR}/externals/${lib_name}") +if (NOT EXISTS "${prefix}") + message(STATUS "Downloading binaries for ${lib_name}...") + file(DOWNLOAD + https://github.com/citra-emu/ext-windows-bin/raw/master/${remote_path}${lib_name}.7z + "${CMAKE_BINARY_DIR}/externals/${lib_name}.7z" SHOW_PROGRESS) + execute_process(COMMAND ${CMAKE_COMMAND} -E tar xf "${CMAKE_BINARY_DIR}/externals/${lib_name}.7z" + WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/externals") +endif() +message(STATUS "Using bundled binaries at ${prefix}") +set(${prefix_var} "${prefix}" PARENT_SCOPE) +endfunction() \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index ec9ca3747f..5524eb5762 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -44,7 +44,7 @@ before_build: # redirect stderr and change the exit code to prevent powershell from cancelling the build if cmake prints a warning cmd /C 'cmake -G "Visual Studio 15 2017 Win64" -DCITRA_USE_BUNDLED_QT=1 -DCITRA_USE_BUNDLED_SDL2=1 -DCMAKE_USE_OPENSSL=0 .. 2>&1 && exit 0' } else { - C:\msys64\usr\bin\bash.exe -lc "cmake -G 'MSYS Makefiles' -DUSE_SYSTEM_CURL=1 -DCMAKE_BUILD_TYPE=Release .. 2>&1" + C:\msys64\usr\bin\bash.exe -lc "cmake -G 'MSYS Makefiles' -DUSE_SYSTEM_CURL=1 -DCITRA_USE_BUNDLED_CURL=1 -DCMAKE_BUILD_TYPE=Release .. 2>&1" } - cd .. @@ -112,9 +112,10 @@ after_build: # copy the compiled binaries and other release files to the release folder Get-ChildItem "$CMAKE_BINARY_DIR" -Recurse -Filter "citra*.exe" | Copy-Item -destination $RELEASE_DIST + # copy the libcurl dll + Get-ChildItem "$CMAKE_BINARY_DIR" -Recurse -Filter "libcurl.dll" | Copy-Item -destination $RELEASE_DIST Copy-Item -path "$CMAKE_SOURCE_DIR/license.txt" -destination $RELEASE_DIST Copy-Item -path "$CMAKE_SOURCE_DIR/README.md" -destination $RELEASE_DIST - # copy all the dll dependencies to the release folder # hardcoded list because we don't build static and determining the list of dlls from the binary is a pain. $MingwDLLs = "Qt5Core.dll","Qt5Widgets.dll","Qt5Gui.dll","Qt5OpenGL.dll", @@ -123,11 +124,7 @@ after_build: "libfreetype-*.dll","libglib-*.dll","libgobject-*.dll","libgraphite2.dll","libiconv-*.dll", "libharfbuzz-*.dll","libintl-*.dll","libpcre-*.dll","libpcre16-*.dll","libpng16-*.dll", # Runtime/Other dependencies - "libgcc_s_seh-*.dll","libstdc++-*.dll","libwinpthread-*.dll","SDL2.dll","zlib1.dll", - # curl dependencies - "libcurl-*.dll","libnghttp2-*.dll","libeay32.dll","libgmp-*.dll","librtmp-*.dll", - "libgnutls-*.dll","libhogweed-*.dll","libnettle-*.dll","libssh2-*.dll", - "ssleay32.dll","libidn-*.dll","libp11-kit-*.dll","libtasn1-*.dll","libunistring-*.dll" + "libgcc_s_seh-*.dll","libstdc++-*.dll","libwinpthread-*.dll","SDL2.dll","zlib1.dll" foreach ($file in $MingwDLLs) { Copy-Item -path "C:/msys64/mingw64/bin/$file" -force -destination "$RELEASE_DIST" } diff --git a/externals/CMakeLists.txt b/externals/CMakeLists.txt index 8e4bcf21f8..4a4ba11012 100644 --- a/externals/CMakeLists.txt +++ b/externals/CMakeLists.txt @@ -1,5 +1,8 @@ # Definitions for all external bundled libraries +set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules) +include(DownloadExternals) + # Catch add_library(catch-single-include INTERFACE) target_include_directories(catch-single-include INTERFACE catch/single_include) @@ -54,9 +57,21 @@ add_subdirectory(enet) target_include_directories(enet INTERFACE ./enet/include) if (ENABLE_WEB_SERVICE) + # msys installed curl is configured to use openssl, but that isn't portable + # since it relies on having the bundled certs install in the home folder for SSL + # by default on mingw, download the precompiled curl thats linked against windows native ssl + if (MINGW AND CITRA_USE_BUNDLED_CURL) + download_bundled_external("curl/" "curl-7_55_1" CURL_PREFIX) + set(CURL_PREFIX "${CMAKE_BINARY_DIR}/externals/curl-7_55_1") + set(CURL_FOUND YES) + set(CURL_INCLUDE_DIR "${CURL_PREFIX}/include" CACHE PATH "Path to curl headers") + set(CURL_LIBRARY "${CURL_PREFIX}/lib/libcurldll.a" CACHE PATH "Path to curl library") + set(CURL_DLL_DIR "${CURL_PREFIX}/lib/" CACHE PATH "Path to curl.dll") + set(USE_SYSTEM_CURL ON CACHE BOOL "") + endif() # CPR - option(BUILD_TESTING OFF) - option(BUILD_CPR_TESTS OFF) + set(BUILD_TESTING OFF CACHE BOOL "") + set(BUILD_CPR_TESTS OFF CACHE BOOL "") add_subdirectory(cpr) target_include_directories(cpr INTERFACE ./cpr/include) From ad0b57f4071fb7ec9da764b3905e0bb5e4c5eef2 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Thu, 7 Sep 2017 22:05:42 -0600 Subject: [PATCH 138/195] GPU: Add draw for immediate and batch modes PR #1461 introduced a regression where some games would change configuration even while in the poorly named "drawing" mode, which broke the heuristic citra was using to determine when to draw the batch. This change adds back in a draw call for batching, and also adds in a draw call in immediate mode each time it adds a triangle. --- src/video_core/command_processor.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp index fb65a3a0a7..fff159058d 100644 --- a/src/video_core/command_processor.cpp +++ b/src/video_core/command_processor.cpp @@ -243,6 +243,15 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { ASSERT(!g_state.geometry_pipeline.NeedIndexInput()); g_state.geometry_pipeline.Setup(shader_engine); g_state.geometry_pipeline.SubmitVertex(output); + + // TODO: If drawing after every immediate mode triangle kills performance, + // change it to flush triangles whenever a draing config register changes + // See: https://github.com/citra-emu/citra/pull/2866#issuecomment-327011550 + VideoCore::g_renderer->Rasterizer()->DrawTriangles(); + if (g_debug_context) { + g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, + nullptr); + } } } } @@ -398,6 +407,12 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { range.second, range.first); } + MICROPROFILE_SCOPE(GPU_Drawing); + VideoCore::g_renderer->Rasterizer()->DrawTriangles(); + if (g_debug_context) { + g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); + } + break; } @@ -632,6 +647,6 @@ void ProcessCommandList(const u32* list, u32 size) { } } -} // namespace +} // namespace CommandProcessor -} // namespace +} // namespace Pica From 214150f00c77474927cbdfb1598dbdb2cb4fcf32 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 21 Jul 2017 22:22:59 -0500 Subject: [PATCH 139/195] Kernel/Memory: Changed GetPhysicalPointer so that it doesn't go through the current process' page table to obtain a pointer. --- src/core/hle/kernel/memory.cpp | 30 +++------------- src/core/hle/kernel/memory.h | 2 ++ src/core/memory.cpp | 65 ++++++++++++++++++++++++++++++++-- src/core/memory.h | 2 -- 4 files changed, 69 insertions(+), 30 deletions(-) diff --git a/src/core/hle/kernel/memory.cpp b/src/core/hle/kernel/memory.cpp index 496d07cb59..7f27e9655c 100644 --- a/src/core/hle/kernel/memory.cpp +++ b/src/core/hle/kernel/memory.cpp @@ -8,7 +8,6 @@ #include #include #include -#include "audio_core/audio_core.h" #include "common/assert.h" #include "common/common_types.h" #include "common/logging/log.h" @@ -24,7 +23,7 @@ namespace Kernel { -static MemoryRegionInfo memory_regions[3]; +MemoryRegionInfo memory_regions[3]; /// Size of the APPLICATION, SYSTEM and BASE memory regions (respectively) for each system /// memory configuration type. @@ -96,9 +95,6 @@ MemoryRegionInfo* GetMemoryRegion(MemoryRegion region) { } } -std::array vram; -std::array n3ds_extra_ram; - void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mapping) { using namespace Memory; @@ -143,30 +139,14 @@ void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mappin return; } - // TODO(yuriks): Use GetPhysicalPointer when that becomes independent of the virtual - // mappings. - u8* target_pointer = nullptr; - switch (area->paddr_base) { - case VRAM_PADDR: - target_pointer = vram.data(); - break; - case DSP_RAM_PADDR: - target_pointer = AudioCore::GetDspMemory().data(); - break; - case N3DS_EXTRA_RAM_PADDR: - target_pointer = n3ds_extra_ram.data(); - break; - default: - UNREACHABLE(); - } + u8* target_pointer = Memory::GetPhysicalPointer(area->paddr_base + offset_into_region); // TODO(yuriks): This flag seems to have some other effect, but it's unknown what MemoryState memory_state = mapping.unk_flag ? MemoryState::Static : MemoryState::IO; - auto vma = address_space - .MapBackingMemory(mapping.address, target_pointer + offset_into_region, - mapping.size, memory_state) - .Unwrap(); + auto vma = + address_space.MapBackingMemory(mapping.address, target_pointer, mapping.size, memory_state) + .Unwrap(); address_space.Reprotect(vma, mapping.read_only ? VMAPermission::Read : VMAPermission::ReadWrite); } diff --git a/src/core/hle/kernel/memory.h b/src/core/hle/kernel/memory.h index 08c1a99892..da6bb35633 100644 --- a/src/core/hle/kernel/memory.h +++ b/src/core/hle/kernel/memory.h @@ -26,4 +26,6 @@ MemoryRegionInfo* GetMemoryRegion(MemoryRegion region); void HandleSpecialMapping(VMManager& address_space, const AddressMapping& mapping); void MapSharedPages(VMManager& address_space); + +extern MemoryRegionInfo memory_regions[3]; } // namespace Kernel diff --git a/src/core/memory.cpp b/src/core/memory.cpp index ea46b6ead8..4dcbf22748 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -4,10 +4,12 @@ #include #include +#include "audio_core/audio_core.h" #include "common/assert.h" #include "common/common_types.h" #include "common/logging/log.h" #include "common/swap.h" +#include "core/hle/kernel/memory.h" #include "core/hle/kernel/process.h" #include "core/memory.h" #include "core/memory_setup.h" @@ -16,6 +18,9 @@ namespace Memory { +static std::array vram; +static std::array n3ds_extra_ram; + PageTable* current_page_table = nullptr; std::array* GetCurrentPageTablePointers() { @@ -236,9 +241,63 @@ std::string ReadCString(VAddr vaddr, std::size_t max_length) { } u8* GetPhysicalPointer(PAddr address) { - // TODO(Subv): This call should not go through the application's memory mapping. - boost::optional vaddr = PhysicalToVirtualAddress(address); - return vaddr ? GetPointer(*vaddr) : nullptr; + struct MemoryArea { + PAddr paddr_base; + u32 size; + }; + + static constexpr MemoryArea memory_areas[] = { + {VRAM_PADDR, VRAM_SIZE}, + {IO_AREA_PADDR, IO_AREA_SIZE}, + {DSP_RAM_PADDR, DSP_RAM_SIZE}, + {FCRAM_PADDR, FCRAM_N3DS_SIZE}, + {N3DS_EXTRA_RAM_PADDR, N3DS_EXTRA_RAM_SIZE}, + }; + + const auto area = + std::find_if(std::begin(memory_areas), std::end(memory_areas), [&](const auto& area) { + return address >= area.paddr_base && address < area.paddr_base + area.size; + }); + + if (area == std::end(memory_areas)) { + LOG_ERROR(HW_Memory, "unknown GetPhysicalPointer @ 0x%08X", address); + return nullptr; + } + + if (area->paddr_base == IO_AREA_PADDR) { + LOG_ERROR(HW_Memory, "MMIO mappings are not supported yet. phys_addr=0x%08X", address); + return nullptr; + } + + u32 offset_into_region = address - area->paddr_base; + + u8* target_pointer = nullptr; + switch (area->paddr_base) { + case VRAM_PADDR: + target_pointer = vram.data() + offset_into_region; + break; + case DSP_RAM_PADDR: + target_pointer = AudioCore::GetDspMemory().data() + offset_into_region; + break; + case FCRAM_PADDR: + for (const auto& region : Kernel::memory_regions) { + if (offset_into_region >= region.base && + offset_into_region < region.base + region.size) { + target_pointer = + region.linear_heap_memory->data() + offset_into_region - region.base; + break; + } + } + ASSERT_MSG(target_pointer != nullptr, "Invalid FCRAM address"); + break; + case N3DS_EXTRA_RAM_PADDR: + target_pointer = n3ds_extra_ram.data() + offset_into_region; + break; + default: + UNREACHABLE(); + } + + return target_pointer; } void RasterizerMarkRegionCached(PAddr start, u32 size, int count_delta) { diff --git a/src/core/memory.h b/src/core/memory.h index 859a142022..b228a48c2e 100644 --- a/src/core/memory.h +++ b/src/core/memory.h @@ -227,8 +227,6 @@ boost::optional PhysicalToVirtualAddress(PAddr addr); /** * Gets a pointer to the memory region beginning at the specified physical address. - * - * @note This is currently implemented using PhysicalToVirtualAddress(). */ u8* GetPhysicalPointer(PAddr address); From b178089251200bd0309afcbcb06b43e7c82dc3bc Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 22 Jul 2017 19:37:26 -0500 Subject: [PATCH 140/195] Kernel/Threads: Don't clear the CPU instruction cache when performing a context switch from an idle thread into a thread in the same process. We were unnecessarily clearing the cache when going from Process A -> Idle -> Process A, this caused extreme performance regressions. --- src/core/hle/kernel/thread.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index b7f094f465..f77c39d18d 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -171,6 +171,8 @@ static void SwitchContext(Thread* new_thread) { // Cancel any outstanding wakeup events for this thread CoreTiming::UnscheduleEvent(ThreadWakeupEventType, new_thread->callback_handle); + auto previous_process = Kernel::g_current_process; + current_thread = new_thread; ready_queue.remove(new_thread->current_priority, new_thread); @@ -179,7 +181,7 @@ static void SwitchContext(Thread* new_thread) { Core::CPU().LoadContext(new_thread->context); Core::CPU().SetCP15Register(CP15_THREAD_URO, new_thread->GetTLSAddress()); - if (!previous_thread || previous_thread->owner_process != current_thread->owner_process) { + if (previous_process != current_thread->owner_process) { Kernel::g_current_process = current_thread->owner_process; Memory::current_page_table = &Kernel::g_current_process->vm_manager.page_table; // We have switched processes and thus, page tables, clear the instruction cache so we From f18a176b601c8dc15b372607a4e9f289bdc25ee4 Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 7 Aug 2017 13:37:16 -0500 Subject: [PATCH 141/195] Kernel/Memory: Make IsValidPhysicalAddress not go through the current process' virtual memory mapping. --- src/core/memory.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 4dcbf22748..4d16736f56 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -208,8 +208,7 @@ bool IsValidVirtualAddress(const VAddr vaddr) { } bool IsValidPhysicalAddress(const PAddr paddr) { - boost::optional vaddr = PhysicalToVirtualAddress(paddr); - return vaddr && IsValidVirtualAddress(*vaddr); + return GetPhysicalPointer(paddr) != nullptr; } u8* GetPointer(const VAddr vaddr) { From 3bde97ea059f7bff4e7ebbc59077a1211ae068f7 Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 7 Aug 2017 14:30:01 -0500 Subject: [PATCH 142/195] Tests/VFP: Use a standalone pagetable for the TestEnvironment memory operations. This fixes building the tests --- src/tests/core/arm/arm_test_common.cpp | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/tests/core/arm/arm_test_common.cpp b/src/tests/core/arm/arm_test_common.cpp index 1df6c56773..8384ce7440 100644 --- a/src/tests/core/arm/arm_test_common.cpp +++ b/src/tests/core/arm/arm_test_common.cpp @@ -3,20 +3,30 @@ // Refer to the license.txt file included. #include "core/core.h" +#include "core/memory.h" #include "core/memory_setup.h" #include "tests/core/arm/arm_test_common.h" namespace ArmTests { +static Memory::PageTable page_table; + TestEnvironment::TestEnvironment(bool mutable_memory_) : mutable_memory(mutable_memory_), test_memory(std::make_shared(this)) { - Memory::MapIoRegion(0x00000000, 0x80000000, test_memory); - Memory::MapIoRegion(0x80000000, 0x80000000, test_memory); + + page_table.pointers.fill(nullptr); + page_table.attributes.fill(Memory::PageType::Unmapped); + page_table.cached_res_count.fill(0); + + Memory::MapIoRegion(page_table, 0x00000000, 0x80000000, test_memory); + Memory::MapIoRegion(page_table, 0x80000000, 0x80000000, test_memory); + + Memory::current_page_table = &page_table; } TestEnvironment::~TestEnvironment() { - Memory::UnmapRegion(0x80000000, 0x80000000); - Memory::UnmapRegion(0x00000000, 0x80000000); + Memory::UnmapRegion(page_table, 0x80000000, 0x80000000); + Memory::UnmapRegion(page_table, 0x00000000, 0x80000000); } void TestEnvironment::SetMemory64(VAddr vaddr, u64 value) { From 7a3ab7c63ddcc79e9dfa46ae0347065f66052105 Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 12 Aug 2017 10:16:35 -0500 Subject: [PATCH 143/195] CPU/Dynarmic: Disable the fast page-table access in dynarmic until it supports switching page tables at runtime. --- src/core/arm/dynarmic/arm_dynarmic.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index 7d2790b08f..f2bd0d2836 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp @@ -56,7 +56,9 @@ static Dynarmic::UserCallbacks GetUserCallbacks( user_callbacks.memory.Write16 = &Memory::Write16; user_callbacks.memory.Write32 = &Memory::Write32; user_callbacks.memory.Write64 = &Memory::Write64; - user_callbacks.page_table = Memory::GetCurrentPageTablePointers(); + // TODO(Subv): Re-add the page table pointers once dynarmic supports switching page tables at + // runtime. + user_callbacks.page_table = nullptr; user_callbacks.coprocessors[15] = std::make_shared(interpeter_state); return user_callbacks; } From 3d86e3afc4b03037fb1ac8c0b637312a5d0e17f8 Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 28 Aug 2017 20:26:07 -0500 Subject: [PATCH 144/195] Services/NS: Port ns:s to the new service framework. --- src/core/CMakeLists.txt | 6 +++-- src/core/hle/service/ns/ns.cpp | 16 +++++++++++++ src/core/hle/service/ns/ns.h | 16 +++++++++++++ src/core/hle/service/ns/ns_s.cpp | 34 ++++++++++++++++++++++++++++ src/core/hle/service/{ => ns}/ns_s.h | 9 ++++---- src/core/hle/service/ns_s.cpp | 33 --------------------------- src/core/hle/service/service.cpp | 5 ++-- 7 files changed, 77 insertions(+), 42 deletions(-) create mode 100644 src/core/hle/service/ns/ns.cpp create mode 100644 src/core/hle/service/ns/ns.h create mode 100644 src/core/hle/service/ns/ns_s.cpp rename src/core/hle/service/{ => ns}/ns_s.h (68%) delete mode 100644 src/core/hle/service/ns_s.cpp diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 662030782e..89578024f1 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -135,7 +135,8 @@ set(SRCS hle/service/nim/nim_aoc.cpp hle/service/nim/nim_s.cpp hle/service/nim/nim_u.cpp - hle/service/ns_s.cpp + hle/service/ns/ns.cpp + hle/service/ns/ns_s.cpp hle/service/nwm/nwm.cpp hle/service/nwm/nwm_cec.cpp hle/service/nwm/nwm_ext.cpp @@ -334,7 +335,8 @@ set(HEADERS hle/service/nim/nim_aoc.h hle/service/nim/nim_s.h hle/service/nim/nim_u.h - hle/service/ns_s.h + hle/service/ns/ns.h + hle/service/ns/ns_s.h hle/service/nwm/nwm.h hle/service/nwm/nwm_cec.h hle/service/nwm/nwm_ext.h diff --git a/src/core/hle/service/ns/ns.cpp b/src/core/hle/service/ns/ns.cpp new file mode 100644 index 0000000000..9e19c38bf9 --- /dev/null +++ b/src/core/hle/service/ns/ns.cpp @@ -0,0 +1,16 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/hle/service/ns/ns.h" +#include "core/hle/service/ns/ns_s.h" + +namespace Service { +namespace NS { + +void InstallInterfaces(SM::ServiceManager& service_manager) { + std::make_shared()->InstallAsService(service_manager); +} + +} // namespace NS +} // namespace Service diff --git a/src/core/hle/service/ns/ns.h b/src/core/hle/service/ns/ns.h new file mode 100644 index 0000000000..c3d67d98c8 --- /dev/null +++ b/src/core/hle/service/ns/ns.h @@ -0,0 +1,16 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include "core/hle/service/service.h" + +namespace Service { +namespace NS { + +/// Registers all NS services with the specified service manager. +void InstallInterfaces(SM::ServiceManager& service_manager); + +} // namespace NS +} // namespace Service diff --git a/src/core/hle/service/ns/ns_s.cpp b/src/core/hle/service/ns/ns_s.cpp new file mode 100644 index 0000000000..d952888dcc --- /dev/null +++ b/src/core/hle/service/ns/ns_s.cpp @@ -0,0 +1,34 @@ +// Copyright 2015 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/hle/service/ns/ns_s.h" + +namespace Service { +namespace NS { + +NS_S::NS_S() : ServiceFramework("ns:s", 2) { + static const FunctionInfo functions[] = { + {0x000100C0, nullptr, "LaunchFIRM"}, + {0x000200C0, nullptr, "LaunchTitle"}, + {0x00030000, nullptr, "TerminateApplication"}, + {0x00040040, nullptr, "TerminateProcess"}, + {0x000500C0, nullptr, "LaunchApplicationFIRM"}, + {0x00060042, nullptr, "SetFIRMParams4A0"}, + {0x00070042, nullptr, "CardUpdateInitialize"}, + {0x00080000, nullptr, "CardUpdateShutdown"}, + {0x000D0140, nullptr, "SetTWLBannerHMAC"}, + {0x000E0000, nullptr, "ShutdownAsync"}, + {0x00100180, nullptr, "RebootSystem"}, + {0x00110100, nullptr, "TerminateTitle"}, + {0x001200C0, nullptr, "SetApplicationCpuTimeLimit"}, + {0x00150140, nullptr, "LaunchApplication"}, + {0x00160000, nullptr, "RebootSystemClean"}, + }; + RegisterHandlers(functions); +} + +NS_S::~NS_S() = default; + +} // namespace NS +} // namespace Service diff --git a/src/core/hle/service/ns_s.h b/src/core/hle/service/ns/ns_s.h similarity index 68% rename from src/core/hle/service/ns_s.h rename to src/core/hle/service/ns/ns_s.h index 90288a5219..660ae453f0 100644 --- a/src/core/hle/service/ns_s.h +++ b/src/core/hle/service/ns/ns_s.h @@ -4,18 +4,17 @@ #pragma once +#include "core/hle/kernel/kernel.h" #include "core/hle/service/service.h" namespace Service { namespace NS { -class NS_S final : public Interface { +/// Interface to "ns:s" service +class NS_S final : public ServiceFramework { public: NS_S(); - - std::string GetPortName() const override { - return "ns:s"; - } + ~NS_S(); }; } // namespace NS diff --git a/src/core/hle/service/ns_s.cpp b/src/core/hle/service/ns_s.cpp deleted file mode 100644 index 215c9aacce..0000000000 --- a/src/core/hle/service/ns_s.cpp +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright 2015 Citra Emulator Project -// Licensed under GPLv2 or any later version -// Refer to the license.txt file included. - -#include "core/hle/service/ns_s.h" - -namespace Service { -namespace NS { - -const Interface::FunctionInfo FunctionTable[] = { - {0x000100C0, nullptr, "LaunchFIRM"}, - {0x000200C0, nullptr, "LaunchTitle"}, - {0x00030000, nullptr, "TerminateApplication"}, - {0x00040040, nullptr, "TerminateProcess"}, - {0x000500C0, nullptr, "LaunchApplicationFIRM"}, - {0x00060042, nullptr, "SetFIRMParams4A0"}, - {0x00070042, nullptr, "CardUpdateInitialize"}, - {0x00080000, nullptr, "CardUpdateShutdown"}, - {0x000D0140, nullptr, "SetTWLBannerHMAC"}, - {0x000E0000, nullptr, "ShutdownAsync"}, - {0x00100180, nullptr, "RebootSystem"}, - {0x00110100, nullptr, "TerminateTitle"}, - {0x001200C0, nullptr, "SetApplicationCpuTimeLimit"}, - {0x00150140, nullptr, "LaunchApplication"}, - {0x00160000, nullptr, "RebootSystemClean"}, -}; - -NS_S::NS_S() { - Register(FunctionTable); -} - -} // namespace NS -} // namespace Service diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index aad950e50d..f267aad740 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp @@ -38,7 +38,7 @@ #include "core/hle/service/news/news.h" #include "core/hle/service/nfc/nfc.h" #include "core/hle/service/nim/nim.h" -#include "core/hle/service/ns_s.h" +#include "core/hle/service/ns/ns.h" #include "core/hle/service/nwm/nwm.h" #include "core/hle/service/pm_app.h" #include "core/hle/service/ptm/ptm.h" @@ -215,6 +215,8 @@ void Init() { SM::g_service_manager = std::make_shared(); SM::ServiceManager::InstallInterfaces(SM::g_service_manager); + NS::InstallInterfaces(*SM::g_service_manager); + AddNamedPort(new ERR::ERR_F); FS::ArchiveInit(); @@ -246,7 +248,6 @@ void Init() { AddService(new HTTP::HTTP_C); AddService(new LDR::LDR_RO); AddService(new MIC::MIC_U); - AddService(new NS::NS_S); AddService(new PM::PM_APP); AddService(new SOC::SOC_U); AddService(new SSL::SSL_C); From 6a110ac5f55502aa1330cc4dd09d11a4eb502e1b Mon Sep 17 00:00:00 2001 From: Huw Pascoe Date: Sat, 16 Sep 2017 04:30:35 +0100 Subject: [PATCH 145/195] Fixed framebuffer warning --- .../renderer_opengl/gl_rasterizer.cpp | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 7b0cd1b667..7e09e4712a 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -237,13 +237,24 @@ void RasterizerOpenGL::DrawTriangles() { glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, color_surface != nullptr ? color_surface->texture.handle : 0, 0); - glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, - depth_surface != nullptr ? depth_surface->texture.handle : 0, 0); - bool has_stencil = - regs.framebuffer.framebuffer.depth_format == Pica::FramebufferRegs::DepthFormat::D24S8; - glFramebufferTexture2D( - GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, - (has_stencil && depth_surface != nullptr) ? depth_surface->texture.handle : 0, 0); + if (depth_surface != nullptr) { + if (regs.framebuffer.framebuffer.depth_format == + Pica::FramebufferRegs::DepthFormat::D24S8) { + // attach both depth and stencil + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, + depth_surface->texture.handle, 0); + } else { + // attach depth + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, + depth_surface->texture.handle, 0); + // clear stencil attachment + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, 0); + } + } else { + // clear both depth and stencil attachment + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, 0, + 0); + } // Sync the viewport // These registers hold half-width and half-height, so must be multiplied by 2 From a234e4c2009b08039d0698cbbcc8595a1f04a615 Mon Sep 17 00:00:00 2001 From: Huw Pascoe Date: Sun, 17 Sep 2017 15:42:45 +0100 Subject: [PATCH 146/195] Improved performance of FromAttributeBuffer Ternary operator is optimized by the compiler whereas std::min() is meant to return a value. I've noticed a 5%-10% emulation speed increase. --- src/video_core/shader/shader.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/video_core/shader/shader.cpp b/src/video_core/shader/shader.cpp index e9063e6164..2857d28297 100644 --- a/src/video_core/shader/shader.cpp +++ b/src/video_core/shader/shader.cpp @@ -52,7 +52,8 @@ OutputVertex OutputVertex::FromAttributeBuffer(const RasterizerRegs& regs, // The hardware takes the absolute and saturates vertex colors like this, *before* doing // interpolation for (unsigned i = 0; i < 4; ++i) { - ret.color[i] = float24::FromFloat32(std::fmin(std::fabs(ret.color[i].ToFloat32()), 1.0f)); + float c = std::fabs(ret.color[i].ToFloat32()); + ret.color[i] = float24::FromFloat32(c < 1.0f ? c : 1.0f); } LOG_TRACE(HW_GPU, "Output vertex: pos(%.2f, %.2f, %.2f, %.2f), quat(%.2f, %.2f, %.2f, %.2f), " From 28c726f20545744a3052a3e8a0a3bf5ff95a5042 Mon Sep 17 00:00:00 2001 From: B3n30 Date: Tue, 19 Sep 2017 03:18:26 +0200 Subject: [PATCH 147/195] WebService: Verify username and token (#2930) * WebService: Verify username and token; Log errors in PostJson * Fixup: added docstrings to the functions * Webservice: Added Icons to the verification, imrpved error detection in cpr, fixup nits * fixup: fmt warning --- dist/icons/checked.png | Bin 0 -> 451 bytes dist/icons/failed.png | Bin 0 -> 428 bytes dist/icons/icons.qrc | 6 ++ src/citra/config.cpp | 2 + src/citra/default_ini.h | 2 + src/citra_qt/CMakeLists.txt | 5 +- src/citra_qt/configuration/config.cpp | 6 ++ src/citra_qt/configuration/configure_web.cpp | 58 ++++++++++- src/citra_qt/configuration/configure_web.h | 12 ++- src/citra_qt/configuration/configure_web.ui | 75 ++++++++++---- src/core/settings.h | 1 + src/core/telemetry_session.cpp | 12 +++ src/core/telemetry_session.h | 10 ++ src/web_service/CMakeLists.txt | 2 + src/web_service/verify_login.cpp | 28 +++++ src/web_service/verify_login.h | 24 +++++ src/web_service/web_backend.cpp | 101 ++++++++++++++++--- src/web_service/web_backend.h | 16 +++ 18 files changed, 322 insertions(+), 38 deletions(-) create mode 100644 dist/icons/checked.png create mode 100644 dist/icons/failed.png create mode 100644 dist/icons/icons.qrc create mode 100644 src/web_service/verify_login.cpp create mode 100644 src/web_service/verify_login.h diff --git a/dist/icons/checked.png b/dist/icons/checked.png new file mode 100644 index 0000000000000000000000000000000000000000..c277e6b4043b2b9a7c7388e076d2c493a23272c7 GIT binary patch literal 451 zcmV;!0X+VRP)vS{GWXg z=jFEi{#(+mPYdl{bJ+sm-!h2X0+2YXqDA3r`Z z{0G?zlwk(Ok%)vW!-P4vv1&#KAea1K`JDUz+#3vF3}U;W`I!(fb_Hr!{gNAuT}jjo tH^dVdGoGE~X@(m@tY$_^vok<|0RUEP!L?xlWyb&j002ovPDHLkV1gj@#Tx(s literal 0 HcmV?d00001 diff --git a/dist/icons/failed.png b/dist/icons/failed.png new file mode 100644 index 0000000000000000000000000000000000000000..ac10f174a6016ce67b9584762866248331104a15 GIT binary patch literal 428 zcmV;d0aN~oP)iBJ(9{^)nYy>P1iS9e6X z!PkBz6qq{~ED9X_H1H;RLik$z*jdv8-<+vR4(t%bzxCJw@6ECkn6Hn4HXv8u123st z4YRt$xL&m1m#x)EKlwbxosNdtMuRAdG>*GnO7@h!9rznWTT6*Lf%)fhz?&5v>}cF0000u( literal 0 HcmV?d00001 diff --git a/dist/icons/icons.qrc b/dist/icons/icons.qrc new file mode 100644 index 0000000000..f0c44862f7 --- /dev/null +++ b/dist/icons/icons.qrc @@ -0,0 +1,6 @@ + + + checked.png + failed.png + + diff --git a/src/citra/config.cpp b/src/citra/config.cpp index a48ef08c73..45c28ad096 100644 --- a/src/citra/config.cpp +++ b/src/citra/config.cpp @@ -162,6 +162,8 @@ void Config::ReadValues() { sdl2_config->GetBoolean("WebService", "enable_telemetry", true); Settings::values.telemetry_endpoint_url = sdl2_config->Get( "WebService", "telemetry_endpoint_url", "https://services.citra-emu.org/api/telemetry"); + Settings::values.verify_endpoint_url = sdl2_config->Get( + "WebService", "verify_endpoint_url", "https://services.citra-emu.org/api/profile"); Settings::values.citra_username = sdl2_config->Get("WebService", "citra_username", ""); Settings::values.citra_token = sdl2_config->Get("WebService", "citra_token", ""); } diff --git a/src/citra/default_ini.h b/src/citra/default_ini.h index 4b13a2e1b0..59faf773ff 100644 --- a/src/citra/default_ini.h +++ b/src/citra/default_ini.h @@ -185,6 +185,8 @@ gdbstub_port=24689 enable_telemetry = # Endpoint URL for submitting telemetry data telemetry_endpoint_url = https://services.citra-emu.org/api/telemetry +# Endpoint URL to verify the username and token +verify_endpoint_url = https://services.citra-emu.org/api/profile # Username and token for Citra Web Service # See https://services.citra-emu.org/ for more info citra_username = diff --git a/src/citra_qt/CMakeLists.txt b/src/citra_qt/CMakeLists.txt index e0a19fd9e7..add7566c24 100644 --- a/src/citra_qt/CMakeLists.txt +++ b/src/citra_qt/CMakeLists.txt @@ -79,6 +79,7 @@ set(UIS main.ui ) +file(GLOB_RECURSE ICONS ${CMAKE_SOURCE_DIR}/dist/icons/*) file(GLOB_RECURSE THEMES ${CMAKE_SOURCE_DIR}/dist/qt_themes/*) create_directory_groups(${SRCS} ${HEADERS} ${UIS}) @@ -92,10 +93,10 @@ endif() if (APPLE) set(MACOSX_ICON "../../dist/citra.icns") set_source_files_properties(${MACOSX_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) - add_executable(citra-qt MACOSX_BUNDLE ${SRCS} ${HEADERS} ${UI_HDRS} ${THEMES} ${MACOSX_ICON}) + add_executable(citra-qt MACOSX_BUNDLE ${SRCS} ${HEADERS} ${UI_HDRS} ${ICONS} ${THEMES} ${MACOSX_ICON}) set_target_properties(citra-qt PROPERTIES MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist) else() - add_executable(citra-qt ${SRCS} ${HEADERS} ${UI_HDRS} ${THEMES}) + add_executable(citra-qt ${SRCS} ${HEADERS} ${UI_HDRS} ${ICONS} ${THEMES}) endif() target_link_libraries(citra-qt PRIVATE audio_core common core input_common network video_core) target_link_libraries(citra-qt PRIVATE Boost::boost glad nihstro-headers Qt5::OpenGL Qt5::Widgets) diff --git a/src/citra_qt/configuration/config.cpp b/src/citra_qt/configuration/config.cpp index ef114aad3b..5261f4c4cc 100644 --- a/src/citra_qt/configuration/config.cpp +++ b/src/citra_qt/configuration/config.cpp @@ -146,6 +146,10 @@ void Config::ReadValues() { qt_config->value("telemetry_endpoint_url", "https://services.citra-emu.org/api/telemetry") .toString() .toStdString(); + Settings::values.verify_endpoint_url = + qt_config->value("verify_endpoint_url", "https://services.citra-emu.org/api/profile") + .toString() + .toStdString(); Settings::values.citra_username = qt_config->value("citra_username").toString().toStdString(); Settings::values.citra_token = qt_config->value("citra_token").toString().toStdString(); qt_config->endGroup(); @@ -293,6 +297,8 @@ void Config::SaveValues() { qt_config->setValue("enable_telemetry", Settings::values.enable_telemetry); qt_config->setValue("telemetry_endpoint_url", QString::fromStdString(Settings::values.telemetry_endpoint_url)); + qt_config->setValue("verify_endpoint_url", + QString::fromStdString(Settings::values.verify_endpoint_url)); qt_config->setValue("citra_username", QString::fromStdString(Settings::values.citra_username)); qt_config->setValue("citra_token", QString::fromStdString(Settings::values.citra_token)); qt_config->endGroup(); diff --git a/src/citra_qt/configuration/configure_web.cpp b/src/citra_qt/configuration/configure_web.cpp index 8715fb0181..38ce19c0fe 100644 --- a/src/citra_qt/configuration/configure_web.cpp +++ b/src/citra_qt/configuration/configure_web.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include #include "citra_qt/configuration/configure_web.h" #include "core/settings.h" #include "core/telemetry_session.h" @@ -11,7 +12,9 @@ ConfigureWeb::ConfigureWeb(QWidget* parent) : QWidget(parent), ui(std::make_unique()) { ui->setupUi(this); connect(ui->button_regenerate_telemetry_id, &QPushButton::clicked, this, - &ConfigureWeb::refreshTelemetryID); + &ConfigureWeb::RefreshTelemetryID); + connect(ui->button_verify_login, &QPushButton::clicked, this, &ConfigureWeb::VerifyLogin); + connect(this, &ConfigureWeb::LoginVerified, this, &ConfigureWeb::OnLoginVerified); this->setConfiguration(); } @@ -34,19 +37,66 @@ void ConfigureWeb::setConfiguration() { ui->toggle_telemetry->setChecked(Settings::values.enable_telemetry); ui->edit_username->setText(QString::fromStdString(Settings::values.citra_username)); ui->edit_token->setText(QString::fromStdString(Settings::values.citra_token)); + // Connect after setting the values, to avoid calling OnLoginChanged now + connect(ui->edit_token, &QLineEdit::textChanged, this, &ConfigureWeb::OnLoginChanged); + connect(ui->edit_username, &QLineEdit::textChanged, this, &ConfigureWeb::OnLoginChanged); ui->label_telemetry_id->setText("Telemetry ID: 0x" + QString::number(Core::GetTelemetryId(), 16).toUpper()); + user_verified = true; } void ConfigureWeb::applyConfiguration() { Settings::values.enable_telemetry = ui->toggle_telemetry->isChecked(); - Settings::values.citra_username = ui->edit_username->text().toStdString(); - Settings::values.citra_token = ui->edit_token->text().toStdString(); + if (user_verified) { + Settings::values.citra_username = ui->edit_username->text().toStdString(); + Settings::values.citra_token = ui->edit_token->text().toStdString(); + } else { + QMessageBox::warning(this, tr("Username and token not verfied"), + tr("Username and token were not verified. The changes to your " + "username and/or token have not been saved.")); + } Settings::Apply(); } -void ConfigureWeb::refreshTelemetryID() { +void ConfigureWeb::RefreshTelemetryID() { const u64 new_telemetry_id{Core::RegenerateTelemetryId()}; ui->label_telemetry_id->setText("Telemetry ID: 0x" + QString::number(new_telemetry_id, 16).toUpper()); } + +void ConfigureWeb::OnLoginChanged() { + if (ui->edit_username->text().isEmpty() && ui->edit_token->text().isEmpty()) { + user_verified = true; + ui->label_username_verified->setPixmap(QPixmap(":/icons/checked.png")); + ui->label_token_verified->setPixmap(QPixmap(":/icons/checked.png")); + } else { + user_verified = false; + ui->label_username_verified->setPixmap(QPixmap(":/icons/failed.png")); + ui->label_token_verified->setPixmap(QPixmap(":/icons/failed.png")); + } +} + +void ConfigureWeb::VerifyLogin() { + verified = + Core::VerifyLogin(ui->edit_username->text().toStdString(), + ui->edit_token->text().toStdString(), [&]() { emit LoginVerified(); }); + ui->button_verify_login->setDisabled(true); + ui->button_verify_login->setText(tr("Verifying")); +} + +void ConfigureWeb::OnLoginVerified() { + ui->button_verify_login->setEnabled(true); + ui->button_verify_login->setText(tr("Verify")); + if (verified.get()) { + user_verified = true; + ui->label_username_verified->setPixmap(QPixmap(":/icons/checked.png")); + ui->label_token_verified->setPixmap(QPixmap(":/icons/checked.png")); + } else { + ui->label_username_verified->setPixmap(QPixmap(":/icons/failed.png")); + ui->label_token_verified->setPixmap(QPixmap(":/icons/failed.png")); + QMessageBox::critical( + this, tr("Verification failed"), + tr("Verification failed. Check that you have entered your username and token " + "correctly, and that your internet connection is working.")); + } +} diff --git a/src/citra_qt/configuration/configure_web.h b/src/citra_qt/configuration/configure_web.h index 20bc254b90..ad2d58f6e1 100644 --- a/src/citra_qt/configuration/configure_web.h +++ b/src/citra_qt/configuration/configure_web.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include @@ -21,10 +22,19 @@ public: void applyConfiguration(); public slots: - void refreshTelemetryID(); + void RefreshTelemetryID(); + void OnLoginChanged(); + void VerifyLogin(); + void OnLoginVerified(); + +signals: + void LoginVerified(); private: void setConfiguration(); + bool user_verified = true; + std::future verified; + std::unique_ptr ui; }; diff --git a/src/citra_qt/configuration/configure_web.ui b/src/citra_qt/configuration/configure_web.ui index d8d283fad4..dd996ab62c 100644 --- a/src/citra_qt/configuration/configure_web.ui +++ b/src/citra_qt/configuration/configure_web.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 926 + 561
@@ -31,14 +31,30 @@ - - + + + + + 0 + 0 + + + + Qt::RightToLeft + - Username: + Verify - + + + + Sign up + + + + 36 @@ -52,7 +68,22 @@ - + + + + + + + + Username: + + + + + + + + 36 @@ -62,13 +93,6 @@ - - - - Sign up - - - @@ -76,6 +100,19 @@ + + + + Qt::Horizontal + + + + 40 + 20 + + + + @@ -105,17 +142,17 @@ - - Telemetry ID: - + + Telemetry ID: + - 0 - 0 + 0 + 0 diff --git a/src/core/settings.h b/src/core/settings.h index 024f146666..8d78cb424d 100644 --- a/src/core/settings.h +++ b/src/core/settings.h @@ -133,6 +133,7 @@ struct Values { // WebService bool enable_telemetry; std::string telemetry_endpoint_url; + std::string verify_endpoint_url; std::string citra_username; std::string citra_token; } extern values; diff --git a/src/core/telemetry_session.cpp b/src/core/telemetry_session.cpp index 104a16cc9e..ca517ff447 100644 --- a/src/core/telemetry_session.cpp +++ b/src/core/telemetry_session.cpp @@ -15,6 +15,7 @@ #ifdef ENABLE_WEB_SERVICE #include "web_service/telemetry_json.h" +#include "web_service/verify_login.h" #endif namespace Core { @@ -75,6 +76,17 @@ u64 RegenerateTelemetryId() { return new_telemetry_id; } +std::future VerifyLogin(std::string username, std::string token, std::function func) { +#ifdef ENABLE_WEB_SERVICE + return WebService::VerifyLogin(username, token, Settings::values.verify_endpoint_url, func); +#else + return std::async(std::launch::async, [func{std::move(func)}]() { + func(); + return false; + }); +#endif +} + TelemetrySession::TelemetrySession() { #ifdef ENABLE_WEB_SERVICE if (Settings::values.enable_telemetry) { diff --git a/src/core/telemetry_session.h b/src/core/telemetry_session.h index 65613daae4..550c6ea2d7 100644 --- a/src/core/telemetry_session.h +++ b/src/core/telemetry_session.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include "common/telemetry.h" @@ -47,4 +48,13 @@ u64 GetTelemetryId(); */ u64 RegenerateTelemetryId(); +/** + * Verifies the username and token. + * @param username Citra username to use for authentication. + * @param token Citra token to use for authentication. + * @param func A function that gets exectued when the verification is finished + * @returns Future with bool indicating whether the verification succeeded + */ +std::future VerifyLogin(std::string username, std::string token, std::function func); + } // namespace Core diff --git a/src/web_service/CMakeLists.txt b/src/web_service/CMakeLists.txt index 334d82a8ab..c938118920 100644 --- a/src/web_service/CMakeLists.txt +++ b/src/web_service/CMakeLists.txt @@ -1,10 +1,12 @@ set(SRCS telemetry_json.cpp + verify_login.cpp web_backend.cpp ) set(HEADERS telemetry_json.h + verify_login.h web_backend.h ) diff --git a/src/web_service/verify_login.cpp b/src/web_service/verify_login.cpp new file mode 100644 index 0000000000..1bc3b5afe9 --- /dev/null +++ b/src/web_service/verify_login.cpp @@ -0,0 +1,28 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include +#include "web_service/verify_login.h" +#include "web_service/web_backend.h" + +namespace WebService { + +std::future VerifyLogin(std::string& username, std::string& token, + const std::string& endpoint_url, std::function func) { + auto get_func = [func, username](const std::string& reply) -> bool { + func(); + if (reply.empty()) + return false; + nlohmann::json json = nlohmann::json::parse(reply); + std::string result; + try { + result = json["username"]; + } catch (const nlohmann::detail::out_of_range&) { + } + return result == username; + }; + return GetJson(get_func, endpoint_url, false, username, token); +} + +} // namespace WebService diff --git a/src/web_service/verify_login.h b/src/web_service/verify_login.h new file mode 100644 index 0000000000..303f5dbbca --- /dev/null +++ b/src/web_service/verify_login.h @@ -0,0 +1,24 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include +#include + +namespace WebService { + +/** + * Checks if username and token is valid + * @param username Citra username to use for authentication. + * @param token Citra token to use for authentication. + * @param endpoint_url URL of the services.citra-emu.org endpoint. + * @param func A function that gets exectued when the verification is finished + * @returns Future with bool indicating whether the verification succeeded + */ +std::future VerifyLogin(std::string& username, std::string& token, + const std::string& endpoint_url, std::function func); + +} // namespace WebService diff --git a/src/web_service/web_backend.cpp b/src/web_service/web_backend.cpp index d28a3f757f..b17d82f9cb 100644 --- a/src/web_service/web_backend.cpp +++ b/src/web_service/web_backend.cpp @@ -18,6 +18,19 @@ static constexpr char API_VERSION[]{"1"}; static std::unique_ptr g_session; +void Win32WSAStartup() { +#ifdef _WIN32 + // On Windows, CPR/libcurl does not properly initialize Winsock. The below code is used to + // initialize Winsock globally, which fixes this problem. Without this, only the first CPR + // session will properly be created, and subsequent ones will fail. + WSADATA wsa_data; + const int wsa_result{WSAStartup(MAKEWORD(2, 2), &wsa_data)}; + if (wsa_result) { + LOG_CRITICAL(WebService, "WSAStartup failed: %d", wsa_result); + } +#endif +} + void PostJson(const std::string& url, const std::string& data, bool allow_anonymous, const std::string& username, const std::string& token) { if (url.empty()) { @@ -31,16 +44,7 @@ void PostJson(const std::string& url, const std::string& data, bool allow_anonym return; } -#ifdef _WIN32 - // On Windows, CPR/libcurl does not properly initialize Winsock. The below code is used to - // initialize Winsock globally, which fixes this problem. Without this, only the first CPR - // session will properly be created, and subsequent ones will fail. - WSADATA wsa_data; - const int wsa_result{WSAStartup(MAKEWORD(2, 2), &wsa_data)}; - if (wsa_result) { - LOG_CRITICAL(WebService, "WSAStartup failed: %d", wsa_result); - } -#endif + Win32WSAStartup(); // Built request header cpr::Header header; @@ -56,8 +60,81 @@ void PostJson(const std::string& url, const std::string& data, bool allow_anonym } // Post JSON asynchronously - static cpr::AsyncResponse future; - future = cpr::PostAsync(cpr::Url{url.c_str()}, cpr::Body{data.c_str()}, header); + static std::future future; + future = cpr::PostCallback( + [](cpr::Response r) { + if (r.error) { + LOG_ERROR(WebService, "POST returned cpr error: %u:%s", + static_cast(r.error.code), r.error.message.c_str()); + return; + } + if (r.status_code >= 400) { + LOG_ERROR(WebService, "POST returned error status code: %u", r.status_code); + return; + } + if (r.header["content-type"].find("application/json") == std::string::npos) { + LOG_ERROR(WebService, "POST returned wrong content: %s", + r.header["content-type"].c_str()); + return; + } + }, + cpr::Url{url}, cpr::Body{data}, header); } +template +std::future GetJson(std::function func, const std::string& url, + bool allow_anonymous, const std::string& username, + const std::string& token) { + if (url.empty()) { + LOG_ERROR(WebService, "URL is invalid"); + return std::async(std::launch::async, [func{std::move(func)}]() { return func(""); }); + } + + const bool are_credentials_provided{!token.empty() && !username.empty()}; + if (!allow_anonymous && !are_credentials_provided) { + LOG_ERROR(WebService, "Credentials must be provided for authenticated requests"); + return std::async(std::launch::async, [func{std::move(func)}]() { return func(""); }); + } + + Win32WSAStartup(); + + // Built request header + cpr::Header header; + if (are_credentials_provided) { + // Authenticated request if credentials are provided + header = {{"Content-Type", "application/json"}, + {"x-username", username.c_str()}, + {"x-token", token.c_str()}, + {"api-version", API_VERSION}}; + } else { + // Otherwise, anonymous request + header = cpr::Header{{"Content-Type", "application/json"}, {"api-version", API_VERSION}}; + } + + // Get JSON asynchronously + return cpr::GetCallback( + [func{std::move(func)}](cpr::Response r) { + if (r.error) { + LOG_ERROR(WebService, "GET returned cpr error: %u:%s", + static_cast(r.error.code), r.error.message.c_str()); + return func(""); + } + if (r.status_code >= 400) { + LOG_ERROR(WebService, "GET returned error code: %u", r.status_code); + return func(""); + } + if (r.header["content-type"].find("application/json") == std::string::npos) { + LOG_ERROR(WebService, "GET returned wrong content: %s", + r.header["content-type"].c_str()); + return func(""); + } + return func(r.text); + }, + cpr::Url{url}, header); +} + +template std::future GetJson(std::function func, + const std::string& url, bool allow_anonymous, + const std::string& username, const std::string& token); + } // namespace WebService diff --git a/src/web_service/web_backend.h b/src/web_service/web_backend.h index d171003986..a63c75d133 100644 --- a/src/web_service/web_backend.h +++ b/src/web_service/web_backend.h @@ -4,6 +4,8 @@ #pragma once +#include +#include #include #include "common/common_types.h" @@ -20,4 +22,18 @@ namespace WebService { void PostJson(const std::string& url, const std::string& data, bool allow_anonymous, const std::string& username = {}, const std::string& token = {}); +/** + * Gets JSON from services.citra-emu.org. + * @param func A function that gets exectued when the json as a string is received + * @param url URL of the services.citra-emu.org endpoint to post data to. + * @param allow_anonymous If true, allow anonymous unauthenticated requests. + * @param username Citra username to use for authentication. + * @param token Citra token to use for authentication. + * @return future that holds the return value T of the func + */ +template +std::future GetJson(std::function func, const std::string& url, + bool allow_anonymous, const std::string& username = {}, + const std::string& token = {}); + } // namespace WebService From 1aa66ed5eda649ade3abb1781e74592cd10b6d98 Mon Sep 17 00:00:00 2001 From: B3n30 Date: Tue, 19 Sep 2017 10:28:57 +0200 Subject: [PATCH 148/195] WebService: Set USE_SYSTEM_CURL for travis linux builds --- .travis-build-docker.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis-build-docker.sh b/.travis-build-docker.sh index ca6fae42b3..01249ace00 100644 --- a/.travis-build-docker.sh +++ b/.travis-build-docker.sh @@ -14,7 +14,7 @@ echo y | sh cmake-3.9.0-Linux-x86_64.sh --prefix=cmake export PATH=/citra/cmake/cmake-3.9.0-Linux-x86_64/bin:$PATH mkdir build && cd build -cmake .. -DCMAKE_BUILD_TYPE=Release +cmake .. -DUSE_SYSTEM_CURL=ON -DCMAKE_BUILD_TYPE=Release make -j4 ctest -VV -C Release From 19d41dcc6e6892125f1123b34db3dc284f04b744 Mon Sep 17 00:00:00 2001 From: James Rowe Date: Sat, 23 Sep 2017 09:28:20 -0600 Subject: [PATCH 149/195] Remove pipeline.gpu_mode and fix minor issues --- src/video_core/command_processor.cpp | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp index fff159058d..3ab4af3747 100644 --- a/src/video_core/command_processor.cpp +++ b/src/video_core/command_processor.cpp @@ -245,7 +245,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { g_state.geometry_pipeline.SubmitVertex(output); // TODO: If drawing after every immediate mode triangle kills performance, - // change it to flush triangles whenever a draing config register changes + // change it to flush triangles whenever a drawing config register changes // See: https://github.com/citra-emu/citra/pull/2866#issuecomment-327011550 VideoCore::g_renderer->Rasterizer()->DrawTriangles(); if (g_debug_context) { @@ -259,16 +259,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { } case PICA_REG_INDEX(pipeline.gpu_mode): - if (regs.pipeline.gpu_mode == PipelineRegs::GPUMode::Configuring) { - MICROPROFILE_SCOPE(GPU_Drawing); - - // Draw immediate mode triangles when GPU Mode is set to GPUMode::Configuring - VideoCore::g_renderer->Rasterizer()->DrawTriangles(); - - if (g_debug_context) { - g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); - } - } + // This register likely just enables vertex processing and doesn't need any special handling break; case PICA_REG_INDEX_WORKAROUND(pipeline.command_buffer.trigger[0], 0x23c): @@ -407,7 +398,6 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { range.second, range.first); } - MICROPROFILE_SCOPE(GPU_Drawing); VideoCore::g_renderer->Rasterizer()->DrawTriangles(); if (g_debug_context) { g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); From 0b33e36292ca44151da32c7866e4c4394add564b Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 24 Sep 2017 00:12:58 -0500 Subject: [PATCH 150/195] HLE/SRV: Implemented RegisterService. Now system modules can do more than just crash immediately on startup. --- src/core/hle/service/sm/sm.cpp | 4 ++++ src/core/hle/service/sm/sm.h | 3 +++ src/core/hle/service/sm/srv.cpp | 26 +++++++++++++++++++++++++- src/core/hle/service/sm/srv.h | 1 + 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/core/hle/service/sm/sm.cpp b/src/core/hle/service/sm/sm.cpp index 5e7fc68f94..854ab9a054 100644 --- a/src/core/hle/service/sm/sm.cpp +++ b/src/core/hle/service/sm/sm.cpp @@ -36,6 +36,10 @@ ResultVal> ServiceManager::RegisterService std::string name, unsigned int max_sessions) { CASCADE_CODE(ValidateServiceName(name)); + + if (registered_services.find(name) != registered_services.end()) + return ERR_ALREADY_REGISTERED; + Kernel::SharedPtr server_port; Kernel::SharedPtr client_port; std::tie(server_port, client_port) = Kernel::ServerPort::CreatePortPair(max_sessions, name); diff --git a/src/core/hle/service/sm/sm.h b/src/core/hle/service/sm/sm.h index 8f0dbf2db4..9f60a79654 100644 --- a/src/core/hle/service/sm/sm.h +++ b/src/core/hle/service/sm/sm.h @@ -32,6 +32,9 @@ constexpr ResultCode ERR_ACCESS_DENIED(6, ErrorModule::SRV, ErrorSummary::Invali ErrorLevel::Permanent); // 0xD8E06406 constexpr ResultCode ERR_NAME_CONTAINS_NUL(7, ErrorModule::SRV, ErrorSummary::WrongArgument, ErrorLevel::Permanent); // 0xD9006407 +constexpr ResultCode ERR_ALREADY_REGISTERED(ErrorDescription::AlreadyExists, ErrorModule::OS, + ErrorSummary::WrongArgument, + ErrorLevel::Permanent); // 0xD9001BFC class ServiceManager { public: diff --git a/src/core/hle/service/sm/srv.cpp b/src/core/hle/service/sm/srv.cpp index 352941e697..5c955cf541 100644 --- a/src/core/hle/service/sm/srv.cpp +++ b/src/core/hle/service/sm/srv.cpp @@ -13,6 +13,7 @@ #include "core/hle/kernel/errors.h" #include "core/hle/kernel/hle_ipc.h" #include "core/hle/kernel/semaphore.h" +#include "core/hle/kernel/server_port.h" #include "core/hle/kernel/server_session.h" #include "core/hle/service/sm/sm.h" #include "core/hle/service/sm/srv.h" @@ -184,12 +185,35 @@ void SRV::PublishToSubscriber(Kernel::HLERequestContext& ctx) { flags); } +void SRV::RegisterService(Kernel::HLERequestContext& ctx) { + IPC::RequestParser rp(ctx, 0x3, 4, 0); + + auto name_buf = rp.PopRaw>(); + size_t name_len = rp.Pop(); + u32 max_sessions = rp.Pop(); + + std::string name(name_buf.data(), std::min(name_len, name_buf.size())); + + auto port = service_manager->RegisterService(name, max_sessions); + + if (port.Failed()) { + IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); + rb.Push(port.Code()); + LOG_ERROR(Service_SRV, "called service=%s -> error 0x%08X", name.c_str(), port.Code().raw); + return; + } + + IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); + rb.Push(RESULT_SUCCESS); + rb.PushObjects(port.Unwrap()); +} + SRV::SRV(std::shared_ptr service_manager) : ServiceFramework("srv:", 4), service_manager(std::move(service_manager)) { static const FunctionInfo functions[] = { {0x00010002, &SRV::RegisterClient, "RegisterClient"}, {0x00020000, &SRV::EnableNotification, "EnableNotification"}, - {0x00030100, nullptr, "RegisterService"}, + {0x00030100, &SRV::RegisterService, "RegisterService"}, {0x000400C0, nullptr, "UnregisterService"}, {0x00050100, &SRV::GetServiceHandle, "GetServiceHandle"}, {0x000600C2, nullptr, "RegisterPort"}, diff --git a/src/core/hle/service/sm/srv.h b/src/core/hle/service/sm/srv.h index 75cca5184b..aad839563e 100644 --- a/src/core/hle/service/sm/srv.h +++ b/src/core/hle/service/sm/srv.h @@ -28,6 +28,7 @@ private: void Subscribe(Kernel::HLERequestContext& ctx); void Unsubscribe(Kernel::HLERequestContext& ctx); void PublishToSubscriber(Kernel::HLERequestContext& ctx); + void RegisterService(Kernel::HLERequestContext& ctx); std::shared_ptr service_manager; Kernel::SharedPtr notification_semaphore; From b57d58c0dc94857d28a3ef197d9656f0fbad8e08 Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 23 Sep 2017 13:59:07 -0500 Subject: [PATCH 151/195] HLE/APT: Prepare the APT Wakeup parameter when the game calls Initialize We need to know what is being run so we can set the APT parameter destination AppId correctly. Delaying the preparation of the parameter until we know which AppId is running lets us support booting both the Home Menu and normal game Applications. --- src/core/hle/service/apt/apt.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 8c0ba73f2a..ea964bab19 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -65,6 +65,7 @@ union AppletAttributes { u32 raw; BitField<0, 3, u32> applet_pos; + BitField<29, 1, u32> is_home_menu; AppletAttributes() : raw(0) {} AppletAttributes(u32 attributes) : raw(attributes) {} @@ -158,6 +159,11 @@ static AppletSlotData* GetAppletSlotData(AppletAttributes attributes) { if (slot == AppletSlot::Error) return nullptr; + // The Home Menu is a system applet, however, it has its own applet slot so that it can run + // concurrently with other system applets. + if (slot == AppletSlot::SystemApplet && attributes.is_home_menu) + return &applet_slots[static_cast(AppletSlot::HomeMenu)]; + return &applet_slots[static_cast(slot)]; } @@ -197,6 +203,19 @@ void Initialize(Service::Interface* self) { rb.Push(RESULT_SUCCESS); rb.PushCopyHandles(Kernel::g_handle_table.Create(slot_data->notification_event).Unwrap(), Kernel::g_handle_table.Create(slot_data->parameter_event).Unwrap()); + + if (slot_data->applet_id == AppletId::Application || + slot_data->applet_id == AppletId::HomeMenu) { + // Initialize the APT parameter to wake up the application. + next_parameter.emplace(); + next_parameter->signal = static_cast(SignalType::Wakeup); + next_parameter->sender_id = static_cast(AppletId::None); + next_parameter->destination_id = app_id; + // Not signaling the parameter event will cause the application (or Home Menu) to hang + // during startup. In the real console, it is usually the Kernel and Home Menu who cause NS + // to signal the HomeMenu and Application parameter events, respectively. + slot_data->parameter_event->Signal(); + } } static u32 DecompressLZ11(const u8* in, u8* out) { @@ -1041,12 +1060,6 @@ void Init() { slot_data.parameter_event = Kernel::Event::Create(Kernel::ResetType::OneShot, "APT:Parameter"); } - - // Initialize the parameter to wake up the application. - next_parameter.emplace(); - next_parameter->signal = static_cast(SignalType::Wakeup); - next_parameter->destination_id = static_cast(AppletId::Application); - applet_slots[static_cast(AppletSlot::Application)].parameter_event->Signal(); } void Shutdown() { From 7096f01c14ff76aefd829ae449a8ab5d474eacf7 Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 23 Sep 2017 14:01:04 -0500 Subject: [PATCH 152/195] HLE/APT: Always return an error from PrepareToStartNewestHomeMenu so that the Home Menu doesn't try to reboot the system. As per 3dbrew: "During Home Menu start-up it uses APT:PrepareToStartNewestHomeMenu. If that doesn't return an error(normally NS returns 0xC8A0CFFC for that), Home Menu starts a hardware reboot with APT:StartNewestHomeMenu etc. " --- src/core/hle/service/apt/apt.cpp | 14 ++++++++++++++ src/core/hle/service/apt/apt.h | 10 ++++++++++ src/core/hle/service/apt/apt_s.cpp | 4 ++-- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index ea964bab19..490c146059 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -776,6 +776,20 @@ void PrepareToStartLibraryApplet(Service::Interface* self) { LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); } +void PrepareToStartNewestHomeMenu(Service::Interface* self) { + IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1A, 0, 0); // 0x1A0000 + IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); + + // TODO(Subv): This command can only be called by a System Applet (return 0xC8A0CC04 otherwise). + + // This command must return an error when called, otherwise the Home Menu will try to reboot the + // system. + rb.Push(ResultCode(ErrorDescription::AlreadyExists, ErrorModule::Applet, + ErrorSummary::InvalidState, ErrorLevel::Status)); + + LOG_DEBUG(Service_APT, "called"); +} + void PreloadLibraryApplet(Service::Interface* self) { IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x16, 1, 0); // 0x160040 AppletId applet_id = static_cast(rp.Pop()); diff --git a/src/core/hle/service/apt/apt.h b/src/core/hle/service/apt/apt.h index 96b28b438a..7b79e1f3e4 100644 --- a/src/core/hle/service/apt/apt.h +++ b/src/core/hle/service/apt/apt.h @@ -419,6 +419,16 @@ void GetAppCpuTimeLimit(Service::Interface* self); */ void PrepareToStartLibraryApplet(Service::Interface* self); +/** + * APT::PrepareToStartNewestHomeMenu service function + * Inputs: + * 0 : Command header [0x001A0000] + * Outputs: + * 0 : Return header + * 1 : Result of function + */ +void PrepareToStartNewestHomeMenu(Service::Interface* self); + /** * APT::PreloadLibraryApplet service function * Inputs: diff --git a/src/core/hle/service/apt/apt_s.cpp b/src/core/hle/service/apt/apt_s.cpp index ec5668d05f..fe1d21fff6 100644 --- a/src/core/hle/service/apt/apt_s.cpp +++ b/src/core/hle/service/apt/apt_s.cpp @@ -17,7 +17,7 @@ const Interface::FunctionInfo FunctionTable[] = { {0x00060040, GetAppletInfo, "GetAppletInfo"}, {0x00070000, nullptr, "GetLastSignaledAppletId"}, {0x00080000, nullptr, "CountRegisteredApplet"}, - {0x00090040, nullptr, "IsRegistered"}, + {0x00090040, IsRegistered, "IsRegistered"}, {0x000A0040, nullptr, "GetAttribute"}, {0x000B0040, InquireNotification, "InquireNotification"}, {0x000C0104, nullptr, "SendParameter"}, @@ -34,7 +34,7 @@ const Interface::FunctionInfo FunctionTable[] = { {0x00170040, nullptr, "FinishPreloadingLibraryApplet"}, {0x00180040, PrepareToStartLibraryApplet, "PrepareToStartLibraryApplet"}, {0x00190040, nullptr, "PrepareToStartSystemApplet"}, - {0x001A0000, nullptr, "PrepareToStartNewestHomeMenu"}, + {0x001A0000, PrepareToStartNewestHomeMenu, "PrepareToStartNewestHomeMenu"}, {0x001B00C4, nullptr, "StartApplication"}, {0x001C0000, nullptr, "WakeupApplication"}, {0x001D0000, nullptr, "CancelApplication"}, From 7117fcc02452c264f39d270188e6d2123a6e26ac Mon Sep 17 00:00:00 2001 From: wwylele Date: Sun, 24 Sep 2017 17:52:11 +0300 Subject: [PATCH 153/195] citra-qt: fix some untranslated strings --- .../configuration/configure_graphics.ui | 22 +++++++++---------- .../configuration/configure_system.cpp | 3 ++- src/citra_qt/configuration/configure_web.cpp | 18 +++++++-------- 3 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/citra_qt/configuration/configure_graphics.ui b/src/citra_qt/configuration/configure_graphics.ui index b340149d52..5667b14b61 100644 --- a/src/citra_qt/configuration/configure_graphics.ui +++ b/src/citra_qt/configuration/configure_graphics.ui @@ -63,57 +63,57 @@ - Auto (Window Size) + Auto (Window Size) - Native (400x240) + Native (400x240) - 2x Native (800x480) + 2x Native (800x480) - 3x Native (1200x720) + 3x Native (1200x720) - 4x Native (1600x960) + 4x Native (1600x960) - 5x Native (2000x1200) + 5x Native (2000x1200) - 6x Native (2400x1440) + 6x Native (2400x1440) - 7x Native (2800x1680) + 7x Native (2800x1680) - 8x Native (3200x1920) + 8x Native (3200x1920) - 9x Native (3600x2160) + 9x Native (3600x2160) - 10x Native (4000x2400) + 10x Native (4000x2400) diff --git a/src/citra_qt/configuration/configure_system.cpp b/src/citra_qt/configuration/configure_system.cpp index 9b1e6711d5..88a067c12f 100644 --- a/src/citra_qt/configuration/configure_system.cpp +++ b/src/citra_qt/configuration/configure_system.cpp @@ -78,7 +78,8 @@ void ConfigureSystem::ReadSystemSettings() { // set the console id u64 console_id = Service::CFG::GetConsoleUniqueId(); - ui->label_console_id->setText("Console ID: 0x" + QString::number(console_id, 16).toUpper()); + ui->label_console_id->setText( + tr("Console ID: 0x%1").arg(QString::number(console_id, 16).toUpper())); } void ConfigureSystem::applyConfiguration() { diff --git a/src/citra_qt/configuration/configure_web.cpp b/src/citra_qt/configuration/configure_web.cpp index 38ce19c0fe..bf8c21ac73 100644 --- a/src/citra_qt/configuration/configure_web.cpp +++ b/src/citra_qt/configuration/configure_web.cpp @@ -24,15 +24,15 @@ ConfigureWeb::~ConfigureWeb() {} void ConfigureWeb::setConfiguration() { ui->web_credentials_disclaimer->setWordWrap(true); ui->telemetry_learn_more->setOpenExternalLinks(true); - ui->telemetry_learn_more->setText("Learn more"); + ui->telemetry_learn_more->setText(tr("Learn more")); ui->web_signup_link->setOpenExternalLinks(true); - ui->web_signup_link->setText("Sign up"); + ui->web_signup_link->setText(tr("Sign up")); ui->web_token_info_link->setOpenExternalLinks(true); ui->web_token_info_link->setText( - "What is my token?"); + tr("What is my token?")); ui->toggle_telemetry->setChecked(Settings::values.enable_telemetry); ui->edit_username->setText(QString::fromStdString(Settings::values.citra_username)); @@ -40,8 +40,8 @@ void ConfigureWeb::setConfiguration() { // Connect after setting the values, to avoid calling OnLoginChanged now connect(ui->edit_token, &QLineEdit::textChanged, this, &ConfigureWeb::OnLoginChanged); connect(ui->edit_username, &QLineEdit::textChanged, this, &ConfigureWeb::OnLoginChanged); - ui->label_telemetry_id->setText("Telemetry ID: 0x" + - QString::number(Core::GetTelemetryId(), 16).toUpper()); + ui->label_telemetry_id->setText( + tr("Telemetry ID: 0x%1").arg(QString::number(Core::GetTelemetryId(), 16).toUpper())); user_verified = true; } @@ -60,8 +60,8 @@ void ConfigureWeb::applyConfiguration() { void ConfigureWeb::RefreshTelemetryID() { const u64 new_telemetry_id{Core::RegenerateTelemetryId()}; - ui->label_telemetry_id->setText("Telemetry ID: 0x" + - QString::number(new_telemetry_id, 16).toUpper()); + ui->label_telemetry_id->setText( + tr("Telemetry ID: 0x%1").arg(QString::number(new_telemetry_id, 16).toUpper())); } void ConfigureWeb::OnLoginChanged() { From 876aa82c29d2e17f8b5a4f74155971cba78c00b6 Mon Sep 17 00:00:00 2001 From: Huw Pascoe Date: Sun, 24 Sep 2017 22:24:45 +0100 Subject: [PATCH 154/195] Optimized Morton --- src/video_core/utils.h | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/src/video_core/utils.h b/src/video_core/utils.h index 7ce83a055f..d8567f3148 100644 --- a/src/video_core/utils.h +++ b/src/video_core/utils.h @@ -8,17 +8,11 @@ namespace VideoCore { -/** - * Interleave the lower 3 bits of each coordinate to get the intra-block offsets, which are - * arranged in a Z-order curve. More details on the bit manipulation at: - * https://fgiesen.wordpress.com/2009/12/13/decoding-morton-codes/ - */ +// 8x8 Z-Order coordinate from 2D coordinates static inline u32 MortonInterleave(u32 x, u32 y) { - u32 i = (x & 7) | ((y & 7) << 8); // ---- -210 - i = (i ^ (i << 2)) & 0x1313; // ---2 --10 - i = (i ^ (i << 1)) & 0x1515; // ---2 -1-0 - i = (i | (i >> 7)) & 0x3F; - return i; + static const u32 xlut[] = {0x00, 0x01, 0x04, 0x05, 0x10, 0x11, 0x14, 0x15}; + static const u32 ylut[] = {0x00, 0x02, 0x08, 0x0a, 0x20, 0x22, 0x28, 0x2a}; + return xlut[x % 8] + ylut[y % 8]; } /** From c02bbb7030efd072511bd0051a44d9e503016f74 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Sun, 24 Sep 2017 22:42:42 +0100 Subject: [PATCH 155/195] memory: Add GetCurrentPageTable/SetCurrentPageTable Don't expose Memory::current_page_table as a global. --- src/core/hle/kernel/thread.cpp | 11 ++++------- src/core/loader/3dsx.cpp | 2 +- src/core/loader/elf.cpp | 2 +- src/core/loader/ncch.cpp | 2 +- src/core/memory.cpp | 10 +++++++++- src/core/memory.h | 3 ++- src/tests/core/arm/arm_test_common.cpp | 2 +- 7 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 324415a367..61378211fc 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -178,16 +178,13 @@ static void SwitchContext(Thread* new_thread) { ready_queue.remove(new_thread->current_priority, new_thread); new_thread->status = THREADSTATUS_RUNNING; - Core::CPU().LoadContext(new_thread->context); - Core::CPU().SetCP15Register(CP15_THREAD_URO, new_thread->GetTLSAddress()); - if (previous_process != current_thread->owner_process) { Kernel::g_current_process = current_thread->owner_process; - Memory::current_page_table = &Kernel::g_current_process->vm_manager.page_table; - // We have switched processes and thus, page tables, clear the instruction cache so we - // don't keep stale data from the previous process. - Core::CPU().ClearInstructionCache(); + SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table); } + + Core::CPU().LoadContext(new_thread->context); + Core::CPU().SetCP15Register(CP15_THREAD_URO, new_thread->GetTLSAddress()); } else { current_thread = nullptr; // Note: We do not reset the current process and current page table when idling because diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp index 69cdc0867e..a03515e6ec 100644 --- a/src/core/loader/3dsx.cpp +++ b/src/core/loader/3dsx.cpp @@ -270,7 +270,7 @@ ResultStatus AppLoader_THREEDSX::Load() { Kernel::g_current_process = Kernel::Process::Create(std::move(codeset)); Kernel::g_current_process->svc_access_mask.set(); Kernel::g_current_process->address_mappings = default_address_mappings; - Memory::current_page_table = &Kernel::g_current_process->vm_manager.page_table; + Memory::SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table); // Attach the default resource limit (APPLICATION) to the process Kernel::g_current_process->resource_limit = diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp index 2f27606a18..2de1f4e816 100644 --- a/src/core/loader/elf.cpp +++ b/src/core/loader/elf.cpp @@ -397,7 +397,7 @@ ResultStatus AppLoader_ELF::Load() { Kernel::g_current_process = Kernel::Process::Create(std::move(codeset)); Kernel::g_current_process->svc_access_mask.set(); Kernel::g_current_process->address_mappings = default_address_mappings; - Memory::current_page_table = &Kernel::g_current_process->vm_manager.page_table; + Memory::SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table); // Attach the default resource limit (APPLICATION) to the process Kernel::g_current_process->resource_limit = diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index 79ea501471..ca282f9352 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -172,7 +172,7 @@ ResultStatus AppLoader_NCCH::LoadExec() { codeset->memory = std::make_shared>(std::move(code)); Kernel::g_current_process = Kernel::Process::Create(std::move(codeset)); - Memory::current_page_table = &Kernel::g_current_process->vm_manager.page_table; + Memory::SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table); // Attach a resource limit to the process based on the resource limit category Kernel::g_current_process->resource_limit = diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 68a6b1ac26..17fa10b499 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -22,12 +22,20 @@ namespace Memory { static std::array vram; static std::array n3ds_extra_ram; -PageTable* current_page_table = nullptr; +static PageTable* current_page_table = nullptr; std::array* GetCurrentPageTablePointers() { return ¤t_page_table->pointers; } +void SetCurrentPageTable(PageTable* page_table) { + current_page_table = page_table; +} + +PageTable* GetCurrentPageTable() { + return current_page_table; +} + static void MapPages(PageTable& page_table, u32 base, u32 size, u8* memory, PageType type) { LOG_DEBUG(HW_Memory, "Mapping %p onto %08X-%08X", memory, base * PAGE_SIZE, (base + size) * PAGE_SIZE); diff --git a/src/core/memory.h b/src/core/memory.h index b228a48c2e..db5a704d0f 100644 --- a/src/core/memory.h +++ b/src/core/memory.h @@ -182,7 +182,8 @@ enum : VAddr { }; /// Currently active page table -extern PageTable* current_page_table; +void SetCurrentPageTable(PageTable* page_table); +PageTable* GetCurrentPageTable(); bool IsValidVirtualAddress(const VAddr addr); bool IsValidPhysicalAddress(const PAddr addr); diff --git a/src/tests/core/arm/arm_test_common.cpp b/src/tests/core/arm/arm_test_common.cpp index 8384ce7440..cfe0d503ae 100644 --- a/src/tests/core/arm/arm_test_common.cpp +++ b/src/tests/core/arm/arm_test_common.cpp @@ -21,7 +21,7 @@ TestEnvironment::TestEnvironment(bool mutable_memory_) Memory::MapIoRegion(page_table, 0x00000000, 0x80000000, test_memory); Memory::MapIoRegion(page_table, 0x80000000, 0x80000000, test_memory); - Memory::current_page_table = &page_table; + Memory::SetCurrentPageTable(&page_table); } TestEnvironment::~TestEnvironment() { From 4e5eb2044acc304fc2068b53eb03e3a626832996 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Sun, 24 Sep 2017 22:43:28 +0100 Subject: [PATCH 156/195] memory: Remove GetCurrentPageTablePointers --- src/core/memory.cpp | 4 ---- src/core/memory.h | 6 ------ 2 files changed, 10 deletions(-) diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 17fa10b499..67ba732ad0 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -24,10 +24,6 @@ static std::array n3ds_extra_ram; static PageTable* current_page_table = nullptr; -std::array* GetCurrentPageTablePointers() { - return ¤t_page_table->pointers; -} - void SetCurrentPageTable(PageTable* page_table) { current_page_table = page_table; } diff --git a/src/core/memory.h b/src/core/memory.h index db5a704d0f..1865bfea04 100644 --- a/src/core/memory.h +++ b/src/core/memory.h @@ -260,10 +260,4 @@ enum class FlushMode { */ void RasterizerFlushVirtualRegion(VAddr start, u32 size, FlushMode mode); -/** - * Dynarmic has an optimization to memory accesses when the pointer to the page exists that - * can be used by setting up the current page table as a callback. This function is used to - * retrieve the current page table for that purpose. - */ -std::array* GetCurrentPageTablePointers(); } // namespace Memory From 67a70bd9e1655dfd705550c1d561f3ba444360c8 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Sun, 24 Sep 2017 22:44:13 +0100 Subject: [PATCH 157/195] ARM_Interface: Implement PageTableChanged --- src/core/arm/arm_interface.h | 3 +++ src/core/arm/dynarmic/arm_dynarmic.cpp | 22 +++++++++++++++++----- src/core/arm/dynarmic/arm_dynarmic.h | 10 +++++++++- src/core/arm/dyncom/arm_dyncom.cpp | 4 ++++ src/core/arm/dyncom/arm_dyncom.h | 1 + src/core/memory.cpp | 5 +++++ 6 files changed, 39 insertions(+), 6 deletions(-) diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index ccd43f4314..2aa017a54a 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h @@ -41,6 +41,9 @@ public: /// Clear all instruction cache virtual void ClearInstructionCache() = 0; + /// Notify CPU emulation that page tables have changed + virtual void PageTableChanged() = 0; + /** * Set the Program Counter to an address * @param addr Address to set PC to diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index 34c5aa3811..42ae93ae8c 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp @@ -41,7 +41,7 @@ static bool IsReadOnlyMemory(u32 vaddr) { } static Dynarmic::UserCallbacks GetUserCallbacks( - const std::shared_ptr& interpeter_state) { + const std::shared_ptr& interpeter_state, Memory::PageTable* current_page_table) { Dynarmic::UserCallbacks user_callbacks{}; user_callbacks.InterpreterFallback = &InterpreterFallback; user_callbacks.user_arg = static_cast(interpeter_state.get()); @@ -56,16 +56,14 @@ static Dynarmic::UserCallbacks GetUserCallbacks( user_callbacks.memory.Write16 = &Memory::Write16; user_callbacks.memory.Write32 = &Memory::Write32; user_callbacks.memory.Write64 = &Memory::Write64; - // TODO(Subv): Re-add the page table pointers once dynarmic supports switching page tables at - // runtime. - user_callbacks.page_table = nullptr; + user_callbacks.page_table = ¤t_page_table->pointers; user_callbacks.coprocessors[15] = std::make_shared(interpeter_state); return user_callbacks; } ARM_Dynarmic::ARM_Dynarmic(PrivilegeMode initial_mode) { interpreter_state = std::make_shared(initial_mode); - jit = std::make_unique(GetUserCallbacks(interpreter_state)); + PageTableChanged(); } void ARM_Dynarmic::SetPC(u32 pc) { @@ -136,6 +134,7 @@ void ARM_Dynarmic::AddTicks(u64 ticks) { MICROPROFILE_DEFINE(ARM_Jit, "ARM JIT", "ARM JIT", MP_RGB(255, 64, 64)); void ARM_Dynarmic::ExecuteInstructions(int num_instructions) { + ASSERT(Memory::GetCurrentPageTable() == current_page_table); MICROPROFILE_SCOPE(ARM_Jit); std::size_t ticks_executed = jit->Run(static_cast(num_instructions)); @@ -178,3 +177,16 @@ void ARM_Dynarmic::PrepareReschedule() { void ARM_Dynarmic::ClearInstructionCache() { jit->ClearCache(); } + +void ARM_Dynarmic::PageTableChanged() { + current_page_table = Memory::GetCurrentPageTable(); + + auto iter = jits.find(current_page_table); + if (iter != jits.end()) { + jit = iter->second.get(); + return; + } + + jit = new Dynarmic::Jit(GetUserCallbacks(interpreter_state, current_page_table)); + jits.emplace(current_page_table, std::unique_ptr(jit)); +} diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h index 834dc989e0..96148a1a53 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.h +++ b/src/core/arm/dynarmic/arm_dynarmic.h @@ -4,12 +4,17 @@ #pragma once +#include #include #include #include "common/common_types.h" #include "core/arm/arm_interface.h" #include "core/arm/skyeye_common/armstate.h" +namespace Memory { +struct PageTable; +} // namespace Memory + class ARM_Dynarmic final : public ARM_Interface { public: ARM_Dynarmic(PrivilegeMode initial_mode); @@ -36,8 +41,11 @@ public: void ExecuteInstructions(int num_instructions) override; void ClearInstructionCache() override; + void PageTableChanged() override; private: - std::unique_ptr jit; + Dynarmic::Jit* jit = nullptr; + Memory::PageTable* current_page_table = nullptr; + std::map> jits; std::shared_ptr interpreter_state; }; diff --git a/src/core/arm/dyncom/arm_dyncom.cpp b/src/core/arm/dyncom/arm_dyncom.cpp index 81f9bf99e0..da955c9b91 100644 --- a/src/core/arm/dyncom/arm_dyncom.cpp +++ b/src/core/arm/dyncom/arm_dyncom.cpp @@ -25,6 +25,10 @@ void ARM_DynCom::ClearInstructionCache() { trans_cache_buf_top = 0; } +void ARM_DynCom::PageTableChanged() { + ClearInstructionCache(); +} + void ARM_DynCom::SetPC(u32 pc) { state->Reg[15] = pc; } diff --git a/src/core/arm/dyncom/arm_dyncom.h b/src/core/arm/dyncom/arm_dyncom.h index 62c174f3ce..0ae5356713 100644 --- a/src/core/arm/dyncom/arm_dyncom.h +++ b/src/core/arm/dyncom/arm_dyncom.h @@ -16,6 +16,7 @@ public: ~ARM_DynCom(); void ClearInstructionCache() override; + void PageTableChanged() override; void SetPC(u32 pc) override; u32 GetPC() const override; diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 67ba732ad0..a6b5f6c999 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -9,6 +9,8 @@ #include "common/common_types.h" #include "common/logging/log.h" #include "common/swap.h" +#include "core/arm/arm_interface.h" +#include "core/core.h" #include "core/hle/kernel/memory.h" #include "core/hle/kernel/process.h" #include "core/hle/lock.h" @@ -26,6 +28,9 @@ static PageTable* current_page_table = nullptr; void SetCurrentPageTable(PageTable* page_table) { current_page_table = page_table; + if (Core::System::GetInstance().IsPoweredOn()) { + Core::CPU().PageTableChanged(); + } } PageTable* GetCurrentPageTable() { From 903906da3b9b274836510adcabf8adf8e2c15954 Mon Sep 17 00:00:00 2001 From: Huw Pascoe Date: Fri, 22 Sep 2017 15:37:42 +0100 Subject: [PATCH 158/195] Optimized Float multiplication Before: ucomiss xmm1, xmm1 jp .L9 pxor xmm2, xmm2 mov edx, 1 ucomiss xmm0, xmm2 setp al cmovne eax, edx test al, al jne .L9 .L3: movaps xmm0, xmm2 ret .L9: ucomiss xmm0, xmm0 jp .L10 pxor xmm2, xmm2 mov edx, 1 ucomiss xmm1, xmm2 setp al cmovne eax, edx test al, al je .L3 After: movaps xmm2, xmm1 mulss xmm2, xmm0 ucomiss xmm2, xmm2 jnp .L3 ucomiss xmm1, xmm0 jnp .L11 .L3: movaps xmm0, xmm2 ret .L11: pxor xmm2, xmm2 jmp .L3 --- src/video_core/pica_types.h | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/src/video_core/pica_types.h b/src/video_core/pica_types.h index 5d7e100665..2eafa7e9e4 100644 --- a/src/video_core/pica_types.h +++ b/src/video_core/pica_types.h @@ -58,11 +58,12 @@ public: } Float operator*(const Float& flt) const { - if ((this->value == 0.f && !std::isnan(flt.value)) || - (flt.value == 0.f && !std::isnan(this->value))) - // PICA gives 0 instead of NaN when multiplying by inf - return Zero(); - return Float::FromFloat32(ToFloat32() * flt.ToFloat32()); + float result = value * flt.ToFloat32(); + // PICA gives 0 instead of NaN when multiplying by inf + if (!std::isnan(value) && !std::isnan(flt.ToFloat32())) + if (std::isnan(result)) + result = 0.f; + return Float::FromFloat32(result); } Float operator/(const Float& flt) const { @@ -78,12 +79,7 @@ public: } Float& operator*=(const Float& flt) { - if ((this->value == 0.f && !std::isnan(flt.value)) || - (flt.value == 0.f && !std::isnan(this->value))) - // PICA gives 0 instead of NaN when multiplying by inf - *this = Zero(); - else - value *= flt.ToFloat32(); + value = operator*(flt).value; return *this; } From d673d508dd1ca463dc72ff68b5582ee56d62f142 Mon Sep 17 00:00:00 2001 From: B3n30 Date: Mon, 25 Sep 2017 08:16:27 +0200 Subject: [PATCH 159/195] Services/UDS: Added a function to send EAPoL-Start packets (#2920) * Services/UDS: Added a function to generate the EAPoL-Start packet body. * Services/UDS: Added filter for beacons. * Services/UDS: Lock a mutex when accessing connection_status from both the emulation and network thread. * Services/UDS: Handle the Association Response frame and respond with the EAPoL-Start frame. * fixup: make use of current_node, changed received_beacons into a list, mutex and assert corrections * fixup: fix damn clang-format --- src/core/hle/service/nwm/nwm_uds.cpp | 261 ++++++++++++++------ src/core/hle/service/nwm/uds_connection.cpp | 9 + src/core/hle/service/nwm/uds_connection.h | 5 + src/core/hle/service/nwm/uds_data.cpp | 21 ++ src/core/hle/service/nwm/uds_data.h | 28 +++ 5 files changed, 243 insertions(+), 81 deletions(-) diff --git a/src/core/hle/service/nwm/nwm_uds.cpp b/src/core/hle/service/nwm/nwm_uds.cpp index 893bbb1e79..4e2af9ae67 100644 --- a/src/core/hle/service/nwm/nwm_uds.cpp +++ b/src/core/hle/service/nwm/nwm_uds.cpp @@ -2,8 +2,10 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include #include #include +#include #include #include #include @@ -37,9 +39,12 @@ static ConnectionStatus connection_status{}; /* Node information about the current network. * The amount of elements in this vector is always the maximum number * of nodes specified in the network configuration. - * The first node is always the host, so this always contains at least 1 entry. + * The first node is always the host. */ -static NodeList node_info(1); +static NodeList node_info; + +// Node information about our own system. +static NodeInfo current_node; // Mapping of bind node ids to their respective events. static std::unordered_map> bind_node_events; @@ -54,6 +59,10 @@ static NetworkInfo network_info; // Event that will generate and send the 802.11 beacon frames. static int beacon_broadcast_event; +// Mutex to synchronize access to the connection status between the emulation thread and the +// network thread. +static std::mutex connection_status_mutex; + // Mutex to synchronize access to the list of received beacons between the emulation thread and the // network thread. static std::mutex beacon_mutex; @@ -63,14 +72,26 @@ static std::mutex beacon_mutex; constexpr size_t MaxBeaconFrames = 15; // List of the last beacons received from the network. -static std::deque received_beacons; +static std::list received_beacons; /** * Returns a list of received 802.11 beacon frames from the specified sender since the last call. */ -std::deque GetReceivedBeacons(const MacAddress& sender) { +std::list GetReceivedBeacons(const MacAddress& sender) { std::lock_guard lock(beacon_mutex); - // TODO(Subv): Filter by sender. + if (sender != Network::BroadcastMac) { + std::list filtered_list; + const auto beacon = std::find_if(received_beacons.begin(), received_beacons.end(), + [&sender](const Network::WifiPacket& packet) { + return packet.transmitter_address == sender; + }); + if (beacon != received_beacons.end()) { + filtered_list.push_back(*beacon); + // TODO(B3N30): Check if the complete deque is cleared or just the fetched entries + received_beacons.erase(beacon); + } + return filtered_list; + } return std::move(received_beacons); } @@ -83,6 +104,15 @@ void SendPacket(Network::WifiPacket& packet) { // limit is exceeded. void HandleBeaconFrame(const Network::WifiPacket& packet) { std::lock_guard lock(beacon_mutex); + const auto unique_beacon = + std::find_if(received_beacons.begin(), received_beacons.end(), + [&packet](const Network::WifiPacket& new_packet) { + return new_packet.transmitter_address == packet.transmitter_address; + }); + if (unique_beacon != received_beacons.end()) { + // We already have a beacon from the same mac in the deque, remove the old one; + received_beacons.erase(unique_beacon); + } received_beacons.emplace_back(packet); @@ -91,14 +121,33 @@ void HandleBeaconFrame(const Network::WifiPacket& packet) { received_beacons.pop_front(); } +void HandleAssociationResponseFrame(const Network::WifiPacket& packet) { + auto assoc_result = GetAssociationResult(packet.data); + + ASSERT_MSG(std::get(assoc_result) == AssocStatus::Successful, + "Could not join network"); + { + std::lock_guard lock(connection_status_mutex); + ASSERT(connection_status.status == static_cast(NetworkStatus::Connecting)); + } + + // Send the EAPoL-Start packet to the server. + using Network::WifiPacket; + WifiPacket eapol_start; + eapol_start.channel = network_channel; + eapol_start.data = GenerateEAPoLStartFrame(std::get(assoc_result), current_node); + // TODO(B3N30): Encrypt the packet. + eapol_start.destination_address = packet.transmitter_address; + eapol_start.type = WifiPacket::PacketType::Data; + + SendPacket(eapol_start); +} + /* * Returns an available index in the nodes array for the * currently-hosted UDS network. */ static u16 GetNextAvailableNodeId() { - ASSERT_MSG(connection_status.status == static_cast(NetworkStatus::ConnectedAsHost), - "Can not accept clients if we're not hosting a network"); - for (u16 index = 0; index < connection_status.max_nodes; ++index) { if ((connection_status.node_bitmask & (1 << index)) == 0) return index; @@ -113,35 +162,46 @@ static u16 GetNextAvailableNodeId() { * authentication frame with SEQ1. */ void StartConnectionSequence(const MacAddress& server) { - ASSERT(connection_status.status == static_cast(NetworkStatus::NotConnected)); - - // TODO(Subv): Handle timeout. - - // Send an authentication frame with SEQ1 using Network::WifiPacket; WifiPacket auth_request; - auth_request.channel = network_channel; - auth_request.data = GenerateAuthenticationFrame(AuthenticationSeq::SEQ1); - auth_request.destination_address = server; - auth_request.type = WifiPacket::PacketType::Authentication; + { + std::lock_guard lock(connection_status_mutex); + ASSERT(connection_status.status == static_cast(NetworkStatus::NotConnected)); + + // TODO(Subv): Handle timeout. + + // Send an authentication frame with SEQ1 + auth_request.channel = network_channel; + auth_request.data = GenerateAuthenticationFrame(AuthenticationSeq::SEQ1); + auth_request.destination_address = server; + auth_request.type = WifiPacket::PacketType::Authentication; + } SendPacket(auth_request); } /// Sends an Association Response frame to the specified mac address void SendAssociationResponseFrame(const MacAddress& address) { - ASSERT_MSG(connection_status.status == static_cast(NetworkStatus::ConnectedAsHost)); - using Network::WifiPacket; WifiPacket assoc_response; - assoc_response.channel = network_channel; - // TODO(Subv): This will cause multiple clients to end up with the same association id, but - // we're not using that for anything. - u16 association_id = 1; - assoc_response.data = GenerateAssocResponseFrame(AssocStatus::Successful, association_id, - network_info.network_id); - assoc_response.destination_address = address; - assoc_response.type = WifiPacket::PacketType::AssociationResponse; + + { + std::lock_guard lock(connection_status_mutex); + if (connection_status.status != static_cast(NetworkStatus::ConnectedAsHost)) { + LOG_ERROR(Service_NWM, "Connection sequence aborted, because connection status is %u", + connection_status.status); + return; + } + + assoc_response.channel = network_channel; + // TODO(Subv): This will cause multiple clients to end up with the same association id, but + // we're not using that for anything. + u16 association_id = 1; + assoc_response.data = GenerateAssocResponseFrame(AssocStatus::Successful, association_id, + network_info.network_id); + assoc_response.destination_address = address; + assoc_response.type = WifiPacket::PacketType::AssociationResponse; + } SendPacket(assoc_response); } @@ -155,16 +215,23 @@ void SendAssociationResponseFrame(const MacAddress& address) { void HandleAuthenticationFrame(const Network::WifiPacket& packet) { // Only the SEQ1 auth frame is handled here, the SEQ2 frame doesn't need any special behavior if (GetAuthenticationSeqNumber(packet.data) == AuthenticationSeq::SEQ1) { - ASSERT_MSG(connection_status.status == static_cast(NetworkStatus::ConnectedAsHost)); - - // Respond with an authentication response frame with SEQ2 using Network::WifiPacket; WifiPacket auth_request; - auth_request.channel = network_channel; - auth_request.data = GenerateAuthenticationFrame(AuthenticationSeq::SEQ2); - auth_request.destination_address = packet.transmitter_address; - auth_request.type = WifiPacket::PacketType::Authentication; + { + std::lock_guard lock(connection_status_mutex); + if (connection_status.status != static_cast(NetworkStatus::ConnectedAsHost)) { + LOG_ERROR(Service_NWM, + "Connection sequence aborted, because connection status is %u", + connection_status.status); + return; + } + // Respond with an authentication response frame with SEQ2 + auth_request.channel = network_channel; + auth_request.data = GenerateAuthenticationFrame(AuthenticationSeq::SEQ2); + auth_request.destination_address = packet.transmitter_address; + auth_request.type = WifiPacket::PacketType::Authentication; + } SendPacket(auth_request); SendAssociationResponseFrame(packet.transmitter_address); @@ -180,6 +247,9 @@ void OnWifiPacketReceived(const Network::WifiPacket& packet) { case Network::WifiPacket::PacketType::Authentication: HandleAuthenticationFrame(packet); break; + case Network::WifiPacket::PacketType::AssociationResponse: + HandleAssociationResponseFrame(packet); + break; } } @@ -305,7 +375,7 @@ static void InitializeWithVersion(Interface* self) { u32 sharedmem_size = rp.Pop(); // Update the node information with the data the game gave us. - rp.PopRaw(node_info[0]); + rp.PopRaw(current_node); u16 version = rp.Pop(); @@ -315,10 +385,14 @@ static void InitializeWithVersion(Interface* self) { ASSERT_MSG(recv_buffer_memory->size == sharedmem_size, "Invalid shared memory size."); - // Reset the connection status, it contains all zeros after initialization, - // except for the actual status value. - connection_status = {}; - connection_status.status = static_cast(NetworkStatus::NotConnected); + { + std::lock_guard lock(connection_status_mutex); + + // Reset the connection status, it contains all zeros after initialization, + // except for the actual status value. + connection_status = {}; + connection_status.status = static_cast(NetworkStatus::NotConnected); + } IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); rb.Push(RESULT_SUCCESS); @@ -348,12 +422,16 @@ static void GetConnectionStatus(Interface* self) { IPC::RequestBuilder rb = rp.MakeBuilder(13, 0); rb.Push(RESULT_SUCCESS); - rb.PushRaw(connection_status); + { + std::lock_guard lock(connection_status_mutex); + rb.PushRaw(connection_status); - // Reset the bitmask of changed nodes after each call to this - // function to prevent falsely informing games of outstanding - // changes in subsequent calls. - connection_status.changed_nodes = 0; + // Reset the bitmask of changed nodes after each call to this + // function to prevent falsely informing games of outstanding + // changes in subsequent calls. + // TODO(Subv): Find exactly where the NWM module resets this value. + connection_status.changed_nodes = 0; + } LOG_DEBUG(Service_NWM, "called"); } @@ -434,31 +512,36 @@ static void BeginHostingNetwork(Interface* self) { // The real UDS module throws a fatal error if this assert fails. ASSERT_MSG(network_info.max_nodes > 1, "Trying to host a network of only one member."); - connection_status.status = static_cast(NetworkStatus::ConnectedAsHost); + { + std::lock_guard lock(connection_status_mutex); + connection_status.status = static_cast(NetworkStatus::ConnectedAsHost); - // Ensure the application data size is less than the maximum value. - ASSERT_MSG(network_info.application_data_size <= ApplicationDataSize, "Data size is too big."); + // Ensure the application data size is less than the maximum value. + ASSERT_MSG(network_info.application_data_size <= ApplicationDataSize, + "Data size is too big."); - // Set up basic information for this network. - network_info.oui_value = NintendoOUI; - network_info.oui_type = static_cast(NintendoTagId::NetworkInfo); + // Set up basic information for this network. + network_info.oui_value = NintendoOUI; + network_info.oui_type = static_cast(NintendoTagId::NetworkInfo); - connection_status.max_nodes = network_info.max_nodes; + connection_status.max_nodes = network_info.max_nodes; - // Resize the nodes list to hold max_nodes. - node_info.resize(network_info.max_nodes); + // Resize the nodes list to hold max_nodes. + node_info.resize(network_info.max_nodes); - // There's currently only one node in the network (the host). - connection_status.total_nodes = 1; - network_info.total_nodes = 1; - // The host is always the first node - connection_status.network_node_id = 1; - node_info[0].network_node_id = 1; - connection_status.nodes[0] = connection_status.network_node_id; - // Set the bit 0 in the nodes bitmask to indicate that node 1 is already taken. - connection_status.node_bitmask |= 1; - // Notify the application that the first node was set. - connection_status.changed_nodes |= 1; + // There's currently only one node in the network (the host). + connection_status.total_nodes = 1; + network_info.total_nodes = 1; + // The host is always the first node + connection_status.network_node_id = 1; + current_node.network_node_id = 1; + connection_status.nodes[0] = connection_status.network_node_id; + // Set the bit 0 in the nodes bitmask to indicate that node 1 is already taken. + connection_status.node_bitmask |= 1; + // Notify the application that the first node was set. + connection_status.changed_nodes |= 1; + node_info[0] = current_node; + } // If the game has a preferred channel, use that instead. if (network_info.channel != 0) @@ -495,9 +578,13 @@ static void DestroyNetwork(Interface* self) { // Unschedule the beacon broadcast event. CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0); - // TODO(Subv): Check if connection_status is indeed reset after this call. - connection_status = {}; - connection_status.status = static_cast(NetworkStatus::NotConnected); + { + std::lock_guard lock(connection_status_mutex); + + // TODO(Subv): Check if connection_status is indeed reset after this call. + connection_status = {}; + connection_status.status = static_cast(NetworkStatus::NotConnected); + } connection_status_event->Signal(); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); @@ -540,17 +627,24 @@ static void SendTo(Interface* self) { IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); - if (connection_status.status != static_cast(NetworkStatus::ConnectedAsClient) && - connection_status.status != static_cast(NetworkStatus::ConnectedAsHost)) { - rb.Push(ResultCode(ErrorDescription::NotAuthorized, ErrorModule::UDS, - ErrorSummary::InvalidState, ErrorLevel::Status)); - return; - } + u16 network_node_id; - if (dest_node_id == connection_status.network_node_id) { - rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::UDS, - ErrorSummary::WrongArgument, ErrorLevel::Status)); - return; + { + std::lock_guard lock(connection_status_mutex); + if (connection_status.status != static_cast(NetworkStatus::ConnectedAsClient) && + connection_status.status != static_cast(NetworkStatus::ConnectedAsHost)) { + rb.Push(ResultCode(ErrorDescription::NotAuthorized, ErrorModule::UDS, + ErrorSummary::InvalidState, ErrorLevel::Status)); + return; + } + + if (dest_node_id == connection_status.network_node_id) { + rb.Push(ResultCode(ErrorDescription::NotFound, ErrorModule::UDS, + ErrorSummary::WrongArgument, ErrorLevel::Status)); + return; + } + + network_node_id = connection_status.network_node_id; } // TODO(Subv): Do something with the flags. @@ -567,8 +661,8 @@ static void SendTo(Interface* self) { // TODO(Subv): Increment the sequence number after each sent packet. u16 sequence_number = 0; - std::vector data_payload = GenerateDataPayload( - data, data_channel, dest_node_id, connection_status.network_node_id, sequence_number); + std::vector data_payload = + GenerateDataPayload(data, data_channel, dest_node_id, network_node_id, sequence_number); // TODO(Subv): Retrieve the MAC address of the dest_node_id and our own to encrypt // and encapsulate the payload. @@ -595,6 +689,7 @@ static void GetChannel(Interface* self) { IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1A, 0, 0); IPC::RequestBuilder rb = rp.MakeBuilder(2, 0); + std::lock_guard lock(connection_status_mutex); bool is_connected = connection_status.status != static_cast(NetworkStatus::NotConnected); u8 channel = is_connected ? network_channel : 0; @@ -766,6 +861,7 @@ static void BeaconBroadcastCallback(u64 userdata, int cycles_late) { * @param network_node_id Network Node Id of the connecting client. */ void OnClientConnected(u16 network_node_id) { + std::lock_guard lock(connection_status_mutex); ASSERT_MSG(connection_status.status == static_cast(NetworkStatus::ConnectedAsHost), "Can not accept clients if we're not hosting a network"); ASSERT_MSG(connection_status.total_nodes < connection_status.max_nodes, @@ -827,8 +923,11 @@ NWM_UDS::~NWM_UDS() { connection_status_event = nullptr; recv_buffer_memory = nullptr; - connection_status = {}; - connection_status.status = static_cast(NetworkStatus::NotConnected); + { + std::lock_guard lock(connection_status_mutex); + connection_status = {}; + connection_status.status = static_cast(NetworkStatus::NotConnected); + } CoreTiming::UnscheduleEvent(beacon_broadcast_event, 0); } diff --git a/src/core/hle/service/nwm/uds_connection.cpp b/src/core/hle/service/nwm/uds_connection.cpp index c8a76ec2aa..c74f51253a 100644 --- a/src/core/hle/service/nwm/uds_connection.cpp +++ b/src/core/hle/service/nwm/uds_connection.cpp @@ -75,5 +75,14 @@ std::vector GenerateAssocResponseFrame(AssocStatus status, u16 association_i return data; } +std::tuple GetAssociationResult(const std::vector& body) { + AssociationResponseFrame frame; + memcpy(&frame, body.data(), sizeof(frame)); + + constexpr u16 AssociationIdMask = 0x3FFF; + return std::make_tuple(static_cast(frame.status_code), + frame.assoc_id & AssociationIdMask); +} + } // namespace NWM } // namespace Service diff --git a/src/core/hle/service/nwm/uds_connection.h b/src/core/hle/service/nwm/uds_connection.h index 73f55a4fd9..a664f8471b 100644 --- a/src/core/hle/service/nwm/uds_connection.h +++ b/src/core/hle/service/nwm/uds_connection.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include "common/common_types.h" #include "common/swap.h" @@ -47,5 +48,9 @@ AuthenticationSeq GetAuthenticationSeqNumber(const std::vector& body); /// network id, starting at the frame body. std::vector GenerateAssocResponseFrame(AssocStatus status, u16 association_id, u32 network_id); +/// Returns a tuple of (association status, association id) from the body of an AssociationResponse +/// frame. +std::tuple GetAssociationResult(const std::vector& body); + } // namespace NWM } // namespace Service diff --git a/src/core/hle/service/nwm/uds_data.cpp b/src/core/hle/service/nwm/uds_data.cpp index 8c6742dba1..0fd9b8b8c6 100644 --- a/src/core/hle/service/nwm/uds_data.cpp +++ b/src/core/hle/service/nwm/uds_data.cpp @@ -274,5 +274,26 @@ std::vector GenerateDataPayload(const std::vector& data, u8 channel, u16 return buffer; } +std::vector GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node_info) { + EAPoLStartPacket eapol_start{}; + eapol_start.association_id = association_id; + eapol_start.friend_code_seed = node_info.friend_code_seed; + + for (int i = 0; i < node_info.username.size(); ++i) + eapol_start.username[i] = node_info.username[i]; + + // Note: The network_node_id and unknown bytes seem to be uninitialized in the NWM module. + // TODO(B3N30): The last 8 bytes seem to have a fixed value of 07 88 15 00 04 e9 13 00 in + // EAPoL-Start packets from different 3DSs to the same host during a Super Smash Bros. 4 game. + // Find out what that means. + + std::vector eapol_buffer(sizeof(EAPoLStartPacket)); + std::memcpy(eapol_buffer.data(), &eapol_start, sizeof(eapol_start)); + + std::vector buffer = GenerateLLCHeader(EtherType::EAPoL); + buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end()); + return buffer; +} + } // namespace NWM } // namespace Service diff --git a/src/core/hle/service/nwm/uds_data.h b/src/core/hle/service/nwm/uds_data.h index a23520a41a..76e8f546b5 100644 --- a/src/core/hle/service/nwm/uds_data.h +++ b/src/core/hle/service/nwm/uds_data.h @@ -67,6 +67,27 @@ struct DataFrameCryptoCTR { static_assert(sizeof(DataFrameCryptoCTR) == 16, "DataFrameCryptoCTR has the wrong size"); +constexpr u16 EAPoLStartMagic = 0x201; + +/* + * Nintendo EAPoLStartPacket, is used to initaliaze a connection between client and host + */ +struct EAPoLStartPacket { + u16_be magic = EAPoLStartMagic; + u16_be association_id; + // This value is hardcoded to 1 in the NWM module. + u16_be unknown = 1; + INSERT_PADDING_BYTES(2); + + u64_be friend_code_seed; + std::array username; + INSERT_PADDING_BYTES(4); + u16_be network_node_id; + INSERT_PADDING_BYTES(6); +}; + +static_assert(sizeof(EAPoLStartPacket) == 0x30, "EAPoLStartPacket has the wrong size"); + /** * Generates an unencrypted 802.11 data payload. * @returns The generated frame payload. @@ -74,5 +95,12 @@ static_assert(sizeof(DataFrameCryptoCTR) == 16, "DataFrameCryptoCTR has the wron std::vector GenerateDataPayload(const std::vector& data, u8 channel, u16 dest_node, u16 src_node, u16 sequence_number); +/* + * Generates an unencrypted 802.11 data frame body with the EAPoL-Start format for UDS + * communication. + * @returns The generated frame body. + */ +std::vector GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node_info); + } // namespace NWM } // namespace Service From c91ccbd0ba4118554d7377bbc3bd4c64f9bccf84 Mon Sep 17 00:00:00 2001 From: Max Thomas Date: Mon, 25 Sep 2017 00:17:38 -0600 Subject: [PATCH 160/195] Loader/NCCH: Add support for loading application updates (#2927) * loader/ncch: split NCCH parsing into its own file * loader/ncch: add support for loading update NCCHs from the SD card * loader/ncch: fix formatting * file_sys/ncch_container: Return a value for OpenFile * loader/ncch: cleanup, always instantiate overlay_ncch to base_ncch * file_sys/ncch_container: better encryption checks, allow non-app NCCHs to load properly and for the existence of NCCH structures to be checked * file_sys/ncch_container: pass filepath as a const reference --- src/core/CMakeLists.txt | 1 + src/core/file_sys/archive_selfncch.cpp | 28 ++- src/core/file_sys/archive_selfncch.h | 4 + src/core/file_sys/ncch_container.cpp | 316 ++++++++++++++++++++++++ src/core/file_sys/ncch_container.h | 244 +++++++++++++++++++ src/core/loader/loader.h | 13 + src/core/loader/ncch.cpp | 319 +++++-------------------- src/core/loader/ncch.h | 184 +------------- 8 files changed, 670 insertions(+), 439 deletions(-) create mode 100644 src/core/file_sys/ncch_container.cpp create mode 100644 src/core/file_sys/ncch_container.h diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index cd1a8de2d2..3ed6199916 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -26,6 +26,7 @@ set(SRCS file_sys/archive_systemsavedata.cpp file_sys/disk_archive.cpp file_sys/ivfc_archive.cpp + file_sys/ncch_container.cpp file_sys/path_parser.cpp file_sys/savedata_archive.cpp frontend/camera/blank_camera.cpp diff --git a/src/core/file_sys/archive_selfncch.cpp b/src/core/file_sys/archive_selfncch.cpp index 298a37a448..7dc91a4050 100644 --- a/src/core/file_sys/archive_selfncch.cpp +++ b/src/core/file_sys/archive_selfncch.cpp @@ -102,8 +102,7 @@ public: switch (static_cast(file_path.type)) { case SelfNCCHFilePathType::UpdateRomFS: - LOG_WARNING(Service_FS, "(STUBBED) open update RomFS"); - return OpenRomFS(); + return OpenUpdateRomFS(); case SelfNCCHFilePathType::RomFS: return OpenRomFS(); @@ -179,6 +178,17 @@ private: } } + ResultVal> OpenUpdateRomFS() const { + if (ncch_data.update_romfs_file) { + return MakeResult>(std::make_unique( + ncch_data.update_romfs_file, ncch_data.update_romfs_offset, + ncch_data.update_romfs_size)); + } else { + LOG_INFO(Service_FS, "Unable to read update RomFS"); + return ERROR_ROMFS_NOT_FOUND; + } + } + ResultVal> OpenExeFS(const std::string& filename) const { if (filename == "icon") { if (ncch_data.icon) { @@ -218,11 +228,19 @@ private: }; ArchiveFactory_SelfNCCH::ArchiveFactory_SelfNCCH(Loader::AppLoader& app_loader) { - std::shared_ptr romfs_file_; + std::shared_ptr romfs_file; if (Loader::ResultStatus::Success == - app_loader.ReadRomFS(romfs_file_, ncch_data.romfs_offset, ncch_data.romfs_size)) { + app_loader.ReadRomFS(romfs_file, ncch_data.romfs_offset, ncch_data.romfs_size)) { - ncch_data.romfs_file = std::move(romfs_file_); + ncch_data.romfs_file = std::move(romfs_file); + } + + std::shared_ptr update_romfs_file; + if (Loader::ResultStatus::Success == + app_loader.ReadUpdateRomFS(update_romfs_file, ncch_data.update_romfs_offset, + ncch_data.update_romfs_size)) { + + ncch_data.update_romfs_file = std::move(update_romfs_file); } std::vector buffer; diff --git a/src/core/file_sys/archive_selfncch.h b/src/core/file_sys/archive_selfncch.h index f1b9712964..f1c6599481 100644 --- a/src/core/file_sys/archive_selfncch.h +++ b/src/core/file_sys/archive_selfncch.h @@ -24,6 +24,10 @@ struct NCCHData { std::shared_ptr romfs_file; u64 romfs_offset = 0; u64 romfs_size = 0; + + std::shared_ptr update_romfs_file; + u64 update_romfs_offset = 0; + u64 update_romfs_size = 0; }; /// File system interface to the SelfNCCH archive diff --git a/src/core/file_sys/ncch_container.cpp b/src/core/file_sys/ncch_container.cpp new file mode 100644 index 0000000000..59c72f3e91 --- /dev/null +++ b/src/core/file_sys/ncch_container.cpp @@ -0,0 +1,316 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include +#include +#include +#include "common/common_types.h" +#include "common/logging/log.h" +#include "core/core.h" +#include "core/file_sys/ncch_container.h" +#include "core/loader/loader.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// FileSys namespace + +namespace FileSys { + +static const int kMaxSections = 8; ///< Maximum number of sections (files) in an ExeFs +static const int kBlockSize = 0x200; ///< Size of ExeFS blocks (in bytes) + +/** + * Get the decompressed size of an LZSS compressed ExeFS file + * @param buffer Buffer of compressed file + * @param size Size of compressed buffer + * @return Size of decompressed buffer + */ +static u32 LZSS_GetDecompressedSize(const u8* buffer, u32 size) { + u32 offset_size = *(u32*)(buffer + size - 4); + return offset_size + size; +} + +/** + * Decompress ExeFS file (compressed with LZSS) + * @param compressed Compressed buffer + * @param compressed_size Size of compressed buffer + * @param decompressed Decompressed buffer + * @param decompressed_size Size of decompressed buffer + * @return True on success, otherwise false + */ +static bool LZSS_Decompress(const u8* compressed, u32 compressed_size, u8* decompressed, + u32 decompressed_size) { + const u8* footer = compressed + compressed_size - 8; + u32 buffer_top_and_bottom = *reinterpret_cast(footer); + u32 out = decompressed_size; + u32 index = compressed_size - ((buffer_top_and_bottom >> 24) & 0xFF); + u32 stop_index = compressed_size - (buffer_top_and_bottom & 0xFFFFFF); + + memset(decompressed, 0, decompressed_size); + memcpy(decompressed, compressed, compressed_size); + + while (index > stop_index) { + u8 control = compressed[--index]; + + for (unsigned i = 0; i < 8; i++) { + if (index <= stop_index) + break; + if (index <= 0) + break; + if (out <= 0) + break; + + if (control & 0x80) { + // Check if compression is out of bounds + if (index < 2) + return false; + index -= 2; + + u32 segment_offset = compressed[index] | (compressed[index + 1] << 8); + u32 segment_size = ((segment_offset >> 12) & 15) + 3; + segment_offset &= 0x0FFF; + segment_offset += 2; + + // Check if compression is out of bounds + if (out < segment_size) + return false; + + for (unsigned j = 0; j < segment_size; j++) { + // Check if compression is out of bounds + if (out + segment_offset >= decompressed_size) + return false; + + u8 data = decompressed[out + segment_offset]; + decompressed[--out] = data; + } + } else { + // Check if compression is out of bounds + if (out < 1) + return false; + decompressed[--out] = compressed[--index]; + } + control <<= 1; + } + } + return true; +} + +NCCHContainer::NCCHContainer(const std::string& filepath) : filepath(filepath) { + file = FileUtil::IOFile(filepath, "rb"); +} + +Loader::ResultStatus NCCHContainer::OpenFile(const std::string& filepath) { + this->filepath = filepath; + file = FileUtil::IOFile(filepath, "rb"); + + if (!file.IsOpen()) { + LOG_WARNING(Service_FS, "Failed to open %s", filepath.c_str()); + return Loader::ResultStatus::Error; + } + + LOG_DEBUG(Service_FS, "Opened %s", filepath.c_str()); + return Loader::ResultStatus::Success; +} + +Loader::ResultStatus NCCHContainer::Load() { + if (is_loaded) + return Loader::ResultStatus::Success; + + // Reset read pointer in case this file has been read before. + file.Seek(0, SEEK_SET); + + if (file.ReadBytes(&ncch_header, sizeof(NCCH_Header)) != sizeof(NCCH_Header)) + return Loader::ResultStatus::Error; + + // Skip NCSD header and load first NCCH (NCSD is just a container of NCCH files)... + if (Loader::MakeMagic('N', 'C', 'S', 'D') == ncch_header.magic) { + LOG_DEBUG(Service_FS, "Only loading the first (bootable) NCCH within the NCSD file!"); + ncch_offset = 0x4000; + file.Seek(ncch_offset, SEEK_SET); + file.ReadBytes(&ncch_header, sizeof(NCCH_Header)); + } + + // Verify we are loading the correct file type... + if (Loader::MakeMagic('N', 'C', 'C', 'H') != ncch_header.magic) + return Loader::ResultStatus::ErrorInvalidFormat; + + // System archives and DLC don't have an extended header but have RomFS + if (ncch_header.extended_header_size) { + if (file.ReadBytes(&exheader_header, sizeof(ExHeader_Header)) != sizeof(ExHeader_Header)) + return Loader::ResultStatus::Error; + + is_compressed = (exheader_header.codeset_info.flags.flag & 1) == 1; + u32 entry_point = exheader_header.codeset_info.text.address; + u32 code_size = exheader_header.codeset_info.text.code_size; + u32 stack_size = exheader_header.codeset_info.stack_size; + u32 bss_size = exheader_header.codeset_info.bss_size; + u32 core_version = exheader_header.arm11_system_local_caps.core_version; + u8 priority = exheader_header.arm11_system_local_caps.priority; + u8 resource_limit_category = + exheader_header.arm11_system_local_caps.resource_limit_category; + + LOG_DEBUG(Service_FS, "Name: %s", exheader_header.codeset_info.name); + LOG_DEBUG(Service_FS, "Program ID: %016" PRIX64, ncch_header.program_id); + LOG_DEBUG(Service_FS, "Code compressed: %s", is_compressed ? "yes" : "no"); + LOG_DEBUG(Service_FS, "Entry point: 0x%08X", entry_point); + LOG_DEBUG(Service_FS, "Code size: 0x%08X", code_size); + LOG_DEBUG(Service_FS, "Stack size: 0x%08X", stack_size); + LOG_DEBUG(Service_FS, "Bss size: 0x%08X", bss_size); + LOG_DEBUG(Service_FS, "Core version: %d", core_version); + LOG_DEBUG(Service_FS, "Thread priority: 0x%X", priority); + LOG_DEBUG(Service_FS, "Resource limit category: %d", resource_limit_category); + LOG_DEBUG(Service_FS, "System Mode: %d", + static_cast(exheader_header.arm11_system_local_caps.system_mode)); + + if (exheader_header.system_info.jump_id != ncch_header.program_id) { + LOG_ERROR(Service_FS, "ExHeader Program ID mismatch: the ROM is probably encrypted."); + return Loader::ResultStatus::ErrorEncrypted; + } + + has_exheader = true; + } + + // DLC can have an ExeFS and a RomFS but no extended header + if (ncch_header.exefs_size) { + exefs_offset = ncch_header.exefs_offset * kBlockSize; + u32 exefs_size = ncch_header.exefs_size * kBlockSize; + + LOG_DEBUG(Service_FS, "ExeFS offset: 0x%08X", exefs_offset); + LOG_DEBUG(Service_FS, "ExeFS size: 0x%08X", exefs_size); + + file.Seek(exefs_offset + ncch_offset, SEEK_SET); + if (file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)) != sizeof(ExeFs_Header)) + return Loader::ResultStatus::Error; + + has_exefs = true; + } + + if (ncch_header.romfs_offset != 0 && ncch_header.romfs_size != 0) + has_romfs = true; + + is_loaded = true; + return Loader::ResultStatus::Success; +} + +Loader::ResultStatus NCCHContainer::LoadSectionExeFS(const char* name, std::vector& buffer) { + if (!file.IsOpen()) + return Loader::ResultStatus::Error; + + Loader::ResultStatus result = Load(); + if (result != Loader::ResultStatus::Success) + return result; + + if (!has_exefs) + return Loader::ResultStatus::ErrorNotUsed; + + LOG_DEBUG(Service_FS, "%d sections:", kMaxSections); + // Iterate through the ExeFs archive until we find a section with the specified name... + for (unsigned section_number = 0; section_number < kMaxSections; section_number++) { + const auto& section = exefs_header.section[section_number]; + + // Load the specified section... + if (strcmp(section.name, name) == 0) { + LOG_DEBUG(Service_FS, "%d - offset: 0x%08X, size: 0x%08X, name: %s", section_number, + section.offset, section.size, section.name); + + s64 section_offset = + (section.offset + exefs_offset + sizeof(ExeFs_Header) + ncch_offset); + file.Seek(section_offset, SEEK_SET); + + if (strcmp(section.name, ".code") == 0 && is_compressed) { + // Section is compressed, read compressed .code section... + std::unique_ptr temp_buffer; + try { + temp_buffer.reset(new u8[section.size]); + } catch (std::bad_alloc&) { + return Loader::ResultStatus::ErrorMemoryAllocationFailed; + } + + if (file.ReadBytes(&temp_buffer[0], section.size) != section.size) + return Loader::ResultStatus::Error; + + // Decompress .code section... + u32 decompressed_size = LZSS_GetDecompressedSize(&temp_buffer[0], section.size); + buffer.resize(decompressed_size); + if (!LZSS_Decompress(&temp_buffer[0], section.size, &buffer[0], decompressed_size)) + return Loader::ResultStatus::ErrorInvalidFormat; + } else { + // Section is uncompressed... + buffer.resize(section.size); + if (file.ReadBytes(&buffer[0], section.size) != section.size) + return Loader::ResultStatus::Error; + } + return Loader::ResultStatus::Success; + } + } + return Loader::ResultStatus::ErrorNotUsed; +} + +Loader::ResultStatus NCCHContainer::ReadRomFS(std::shared_ptr& romfs_file, + u64& offset, u64& size) { + if (!file.IsOpen()) + return Loader::ResultStatus::Error; + + Loader::ResultStatus result = Load(); + if (result != Loader::ResultStatus::Success) + return result; + + if (!has_romfs) { + LOG_DEBUG(Service_FS, "RomFS requested from NCCH which has no RomFS"); + return Loader::ResultStatus::ErrorNotUsed; + } + + u32 romfs_offset = ncch_offset + (ncch_header.romfs_offset * kBlockSize) + 0x1000; + u32 romfs_size = (ncch_header.romfs_size * kBlockSize) - 0x1000; + + LOG_DEBUG(Service_FS, "RomFS offset: 0x%08X", romfs_offset); + LOG_DEBUG(Service_FS, "RomFS size: 0x%08X", romfs_size); + + if (file.GetSize() < romfs_offset + romfs_size) + return Loader::ResultStatus::Error; + + // We reopen the file, to allow its position to be independent from file's + romfs_file = std::make_shared(filepath, "rb"); + if (!romfs_file->IsOpen()) + return Loader::ResultStatus::Error; + + offset = romfs_offset; + size = romfs_size; + + return Loader::ResultStatus::Success; +} + +Loader::ResultStatus NCCHContainer::ReadProgramId(u64_le& program_id) { + Loader::ResultStatus result = Load(); + if (result != Loader::ResultStatus::Success) + return result; + + program_id = ncch_header.program_id; + return Loader::ResultStatus::Success; +} + +bool NCCHContainer::HasExeFS() { + Loader::ResultStatus result = Load(); + if (result != Loader::ResultStatus::Success) + return false; + + return has_exefs; +} + +bool NCCHContainer::HasRomFS() { + Loader::ResultStatus result = Load(); + if (result != Loader::ResultStatus::Success) + return false; + + return has_romfs; +} + +bool NCCHContainer::HasExHeader() { + Loader::ResultStatus result = Load(); + if (result != Loader::ResultStatus::Success) + return false; + + return has_exheader; +} + +} // namespace FileSys diff --git a/src/core/file_sys/ncch_container.h b/src/core/file_sys/ncch_container.h new file mode 100644 index 0000000000..8af9032b42 --- /dev/null +++ b/src/core/file_sys/ncch_container.h @@ -0,0 +1,244 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include +#include +#include +#include "common/bit_field.h" +#include "common/common_types.h" +#include "common/file_util.h" +#include "common/swap.h" +#include "core/core.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////// +/// NCCH header (Note: "NCCH" appears to be a publicly unknown acronym) + +struct NCCH_Header { + u8 signature[0x100]; + u32_le magic; + u32_le content_size; + u8 partition_id[8]; + u16_le maker_code; + u16_le version; + u8 reserved_0[4]; + u64_le program_id; + u8 reserved_1[0x10]; + u8 logo_region_hash[0x20]; + u8 product_code[0x10]; + u8 extended_header_hash[0x20]; + u32_le extended_header_size; + u8 reserved_2[4]; + u8 flags[8]; + u32_le plain_region_offset; + u32_le plain_region_size; + u32_le logo_region_offset; + u32_le logo_region_size; + u32_le exefs_offset; + u32_le exefs_size; + u32_le exefs_hash_region_size; + u8 reserved_3[4]; + u32_le romfs_offset; + u32_le romfs_size; + u32_le romfs_hash_region_size; + u8 reserved_4[4]; + u8 exefs_super_block_hash[0x20]; + u8 romfs_super_block_hash[0x20]; +}; + +static_assert(sizeof(NCCH_Header) == 0x200, "NCCH header structure size is wrong"); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ExeFS (executable file system) headers + +struct ExeFs_SectionHeader { + char name[8]; + u32 offset; + u32 size; +}; + +struct ExeFs_Header { + ExeFs_SectionHeader section[8]; + u8 reserved[0x80]; + u8 hashes[8][0x20]; +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// ExHeader (executable file system header) headers + +struct ExHeader_SystemInfoFlags { + u8 reserved[5]; + u8 flag; + u8 remaster_version[2]; +}; + +struct ExHeader_CodeSegmentInfo { + u32 address; + u32 num_max_pages; + u32 code_size; +}; + +struct ExHeader_CodeSetInfo { + u8 name[8]; + ExHeader_SystemInfoFlags flags; + ExHeader_CodeSegmentInfo text; + u32 stack_size; + ExHeader_CodeSegmentInfo ro; + u8 reserved[4]; + ExHeader_CodeSegmentInfo data; + u32 bss_size; +}; + +struct ExHeader_DependencyList { + u8 program_id[0x30][8]; +}; + +struct ExHeader_SystemInfo { + u64 save_data_size; + u64_le jump_id; + u8 reserved_2[0x30]; +}; + +struct ExHeader_StorageInfo { + u8 ext_save_data_id[8]; + u8 system_save_data_id[8]; + u8 reserved[8]; + u8 access_info[7]; + u8 other_attributes; +}; + +struct ExHeader_ARM11_SystemLocalCaps { + u64_le program_id; + u32_le core_version; + u8 reserved_flags[2]; + union { + u8 flags0; + BitField<0, 2, u8> ideal_processor; + BitField<2, 2, u8> affinity_mask; + BitField<4, 4, u8> system_mode; + }; + u8 priority; + u8 resource_limit_descriptor[0x10][2]; + ExHeader_StorageInfo storage_info; + u8 service_access_control[0x20][8]; + u8 ex_service_access_control[0x2][8]; + u8 reserved[0xf]; + u8 resource_limit_category; +}; + +struct ExHeader_ARM11_KernelCaps { + u32_le descriptors[28]; + u8 reserved[0x10]; +}; + +struct ExHeader_ARM9_AccessControl { + u8 descriptors[15]; + u8 descversion; +}; + +struct ExHeader_Header { + ExHeader_CodeSetInfo codeset_info; + ExHeader_DependencyList dependency_list; + ExHeader_SystemInfo system_info; + ExHeader_ARM11_SystemLocalCaps arm11_system_local_caps; + ExHeader_ARM11_KernelCaps arm11_kernel_caps; + ExHeader_ARM9_AccessControl arm9_access_control; + struct { + u8 signature[0x100]; + u8 ncch_public_key_modulus[0x100]; + ExHeader_ARM11_SystemLocalCaps arm11_system_local_caps; + ExHeader_ARM11_KernelCaps arm11_kernel_caps; + ExHeader_ARM9_AccessControl arm9_access_control; + } access_desc; +}; + +static_assert(sizeof(ExHeader_Header) == 0x800, "ExHeader structure size is wrong"); + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// FileSys namespace + +namespace FileSys { + +/** + * Helper which implements an interface to deal with NCCH containers which can + * contain ExeFS archives or RomFS archives for games or other applications. + */ +class NCCHContainer { +public: + NCCHContainer(const std::string& filepath); + NCCHContainer() {} + + Loader::ResultStatus OpenFile(const std::string& filepath); + + /** + * Ensure ExeFS and exheader is loaded and ready for reading sections + * @return ResultStatus result of function + */ + Loader::ResultStatus Load(); + + /** + * Reads an application ExeFS section of an NCCH file (e.g. .code, .logo, etc.) + * @param name Name of section to read out of NCCH file + * @param buffer Vector to read data into + * @return ResultStatus result of function + */ + Loader::ResultStatus LoadSectionExeFS(const char* name, std::vector& buffer); + + /** + * Get the RomFS of the NCCH container + * Since the RomFS can be huge, we return a file reference instead of copying to a buffer + * @param romfs_file The file containing the RomFS + * @param offset The offset the romfs begins on + * @param size The size of the romfs + * @return ResultStatus result of function + */ + Loader::ResultStatus ReadRomFS(std::shared_ptr& romfs_file, u64& offset, + u64& size); + + /** + * Get the Program ID of the NCCH container + * @return ResultStatus result of function + */ + Loader::ResultStatus ReadProgramId(u64_le& program_id); + + /** + * Checks whether the NCCH container contains an ExeFS + * @return bool check result + */ + bool HasExeFS(); + + /** + * Checks whether the NCCH container contains a RomFS + * @return bool check result + */ + bool HasRomFS(); + + /** + * Checks whether the NCCH container contains an ExHeader + * @return bool check result + */ + bool HasExHeader(); + + NCCH_Header ncch_header; + ExeFs_Header exefs_header; + ExHeader_Header exheader_header; + +private: + bool has_exheader = false; + bool has_exefs = false; + bool has_romfs = false; + + bool is_loaded = false; + bool is_compressed = false; + + u32 ncch_offset = 0; // Offset to NCCH header, can be 0 or after NCSD header + u32 exefs_offset = 0; + + std::string filepath; + FileUtil::IOFile file; +}; + +} // namespace FileSys diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h index e731888a27..3160fd2fdc 100644 --- a/src/core/loader/loader.h +++ b/src/core/loader/loader.h @@ -166,6 +166,19 @@ public: return ResultStatus::ErrorNotImplemented; } + /** + * Get the update RomFS of the application + * Since the RomFS can be huge, we return a file reference instead of copying to a buffer + * @param romfs_file The file containing the RomFS + * @param offset The offset the romfs begins on + * @param size The size of the romfs + * @return ResultStatus result of function + */ + virtual ResultStatus ReadUpdateRomFS(std::shared_ptr& romfs_file, u64& offset, + u64& size) { + return ResultStatus::ErrorNotImplemented; + } + /** * Get the title of the application * @param title Reference to store the application title into diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index 79ea501471..bef7fa567d 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -13,6 +13,7 @@ #include "common/swap.h" #include "core/core.h" #include "core/file_sys/archive_selfncch.h" +#include "core/file_sys/ncch_container.h" #include "core/hle/kernel/process.h" #include "core/hle/kernel/resource_limit.h" #include "core/hle/service/cfg/cfg.h" @@ -27,87 +28,7 @@ namespace Loader { -static const int kMaxSections = 8; ///< Maximum number of sections (files) in an ExeFs -static const int kBlockSize = 0x200; ///< Size of ExeFS blocks (in bytes) - -/** - * Get the decompressed size of an LZSS compressed ExeFS file - * @param buffer Buffer of compressed file - * @param size Size of compressed buffer - * @return Size of decompressed buffer - */ -static u32 LZSS_GetDecompressedSize(const u8* buffer, u32 size) { - u32 offset_size = *(u32*)(buffer + size - 4); - return offset_size + size; -} - -/** - * Decompress ExeFS file (compressed with LZSS) - * @param compressed Compressed buffer - * @param compressed_size Size of compressed buffer - * @param decompressed Decompressed buffer - * @param decompressed_size Size of decompressed buffer - * @return True on success, otherwise false - */ -static bool LZSS_Decompress(const u8* compressed, u32 compressed_size, u8* decompressed, - u32 decompressed_size) { - const u8* footer = compressed + compressed_size - 8; - u32 buffer_top_and_bottom = *reinterpret_cast(footer); - u32 out = decompressed_size; - u32 index = compressed_size - ((buffer_top_and_bottom >> 24) & 0xFF); - u32 stop_index = compressed_size - (buffer_top_and_bottom & 0xFFFFFF); - - memset(decompressed, 0, decompressed_size); - memcpy(decompressed, compressed, compressed_size); - - while (index > stop_index) { - u8 control = compressed[--index]; - - for (unsigned i = 0; i < 8; i++) { - if (index <= stop_index) - break; - if (index <= 0) - break; - if (out <= 0) - break; - - if (control & 0x80) { - // Check if compression is out of bounds - if (index < 2) - return false; - index -= 2; - - u32 segment_offset = compressed[index] | (compressed[index + 1] << 8); - u32 segment_size = ((segment_offset >> 12) & 15) + 3; - segment_offset &= 0x0FFF; - segment_offset += 2; - - // Check if compression is out of bounds - if (out < segment_size) - return false; - - for (unsigned j = 0; j < segment_size; j++) { - // Check if compression is out of bounds - if (out + segment_offset >= decompressed_size) - return false; - - u8 data = decompressed[out + segment_offset]; - decompressed[--out] = data; - } - } else { - // Check if compression is out of bounds - if (out < 1) - return false; - decompressed[--out] = compressed[--index]; - } - control <<= 1; - } - } - return true; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// AppLoader_NCCH class +static const u64 UPDATE_MASK = 0x0000000e00000000; FileType AppLoader_NCCH::IdentifyType(FileUtil::IOFile& file) { u32 magic; @@ -124,15 +45,25 @@ FileType AppLoader_NCCH::IdentifyType(FileUtil::IOFile& file) { return FileType::Error; } +static std::string GetUpdateNCCHPath(u64_le program_id) { + u32 high = static_cast((program_id | UPDATE_MASK) >> 32); + u32 low = static_cast((program_id | UPDATE_MASK) & 0xFFFFFFFF); + + return Common::StringFromFormat("%sNintendo 3DS/%s/%s/title/%08x/%08x/content/00000000.app", + FileUtil::GetUserPath(D_SDMC_IDX).c_str(), SYSTEM_ID, SDCARD_ID, + high, low); +} + std::pair, ResultStatus> AppLoader_NCCH::LoadKernelSystemMode() { if (!is_loaded) { - ResultStatus res = LoadExeFS(); + ResultStatus res = base_ncch.Load(); if (res != ResultStatus::Success) { return std::make_pair(boost::none, res); } } + // Set the system mode as the one from the exheader. - return std::make_pair(exheader_header.arm11_system_local_caps.system_mode.Value(), + return std::make_pair(overlay_ncch->exheader_header.arm11_system_local_caps.system_mode.Value(), ResultStatus::Success); } @@ -144,29 +75,34 @@ ResultStatus AppLoader_NCCH::LoadExec() { return ResultStatus::ErrorNotLoaded; std::vector code; - if (ResultStatus::Success == ReadCode(code)) { + u64_le program_id; + if (ResultStatus::Success == ReadCode(code) && + ResultStatus::Success == ReadProgramId(program_id)) { std::string process_name = Common::StringFromFixedZeroTerminatedBuffer( - (const char*)exheader_header.codeset_info.name, 8); + (const char*)overlay_ncch->exheader_header.codeset_info.name, 8); - SharedPtr codeset = CodeSet::Create(process_name, ncch_header.program_id); + SharedPtr codeset = CodeSet::Create(process_name, program_id); codeset->code.offset = 0; - codeset->code.addr = exheader_header.codeset_info.text.address; - codeset->code.size = exheader_header.codeset_info.text.num_max_pages * Memory::PAGE_SIZE; + codeset->code.addr = overlay_ncch->exheader_header.codeset_info.text.address; + codeset->code.size = + overlay_ncch->exheader_header.codeset_info.text.num_max_pages * Memory::PAGE_SIZE; codeset->rodata.offset = codeset->code.offset + codeset->code.size; - codeset->rodata.addr = exheader_header.codeset_info.ro.address; - codeset->rodata.size = exheader_header.codeset_info.ro.num_max_pages * Memory::PAGE_SIZE; + codeset->rodata.addr = overlay_ncch->exheader_header.codeset_info.ro.address; + codeset->rodata.size = + overlay_ncch->exheader_header.codeset_info.ro.num_max_pages * Memory::PAGE_SIZE; // TODO(yuriks): Not sure if the bss size is added to the page-aligned .data size or just // to the regular size. Playing it safe for now. - u32 bss_page_size = (exheader_header.codeset_info.bss_size + 0xFFF) & ~0xFFF; + u32 bss_page_size = (overlay_ncch->exheader_header.codeset_info.bss_size + 0xFFF) & ~0xFFF; code.resize(code.size() + bss_page_size, 0); codeset->data.offset = codeset->rodata.offset + codeset->rodata.size; - codeset->data.addr = exheader_header.codeset_info.data.address; + codeset->data.addr = overlay_ncch->exheader_header.codeset_info.data.address; codeset->data.size = - exheader_header.codeset_info.data.num_max_pages * Memory::PAGE_SIZE + bss_page_size; + overlay_ncch->exheader_header.codeset_info.data.num_max_pages * Memory::PAGE_SIZE + + bss_page_size; codeset->entrypoint = codeset->code.addr; codeset->memory = std::make_shared>(std::move(code)); @@ -177,150 +113,27 @@ ResultStatus AppLoader_NCCH::LoadExec() { // Attach a resource limit to the process based on the resource limit category Kernel::g_current_process->resource_limit = Kernel::ResourceLimit::GetForCategory(static_cast( - exheader_header.arm11_system_local_caps.resource_limit_category)); + overlay_ncch->exheader_header.arm11_system_local_caps.resource_limit_category)); // Set the default CPU core for this process Kernel::g_current_process->ideal_processor = - exheader_header.arm11_system_local_caps.ideal_processor; + overlay_ncch->exheader_header.arm11_system_local_caps.ideal_processor; // Copy data while converting endianness - std::array kernel_caps; - std::copy_n(exheader_header.arm11_kernel_caps.descriptors, kernel_caps.size(), + std::arrayexheader_header.arm11_kernel_caps.descriptors)> + kernel_caps; + std::copy_n(overlay_ncch->exheader_header.arm11_kernel_caps.descriptors, kernel_caps.size(), begin(kernel_caps)); Kernel::g_current_process->ParseKernelCaps(kernel_caps.data(), kernel_caps.size()); - s32 priority = exheader_header.arm11_system_local_caps.priority; - u32 stack_size = exheader_header.codeset_info.stack_size; + s32 priority = overlay_ncch->exheader_header.arm11_system_local_caps.priority; + u32 stack_size = overlay_ncch->exheader_header.codeset_info.stack_size; Kernel::g_current_process->Run(priority, stack_size); return ResultStatus::Success; } return ResultStatus::Error; } -ResultStatus AppLoader_NCCH::LoadSectionExeFS(const char* name, std::vector& buffer) { - if (!file.IsOpen()) - return ResultStatus::Error; - - ResultStatus result = LoadExeFS(); - if (result != ResultStatus::Success) - return result; - - LOG_DEBUG(Loader, "%d sections:", kMaxSections); - // Iterate through the ExeFs archive until we find a section with the specified name... - for (unsigned section_number = 0; section_number < kMaxSections; section_number++) { - const auto& section = exefs_header.section[section_number]; - - // Load the specified section... - if (strcmp(section.name, name) == 0) { - LOG_DEBUG(Loader, "%d - offset: 0x%08X, size: 0x%08X, name: %s", section_number, - section.offset, section.size, section.name); - - s64 section_offset = - (section.offset + exefs_offset + sizeof(ExeFs_Header) + ncch_offset); - file.Seek(section_offset, SEEK_SET); - - if (strcmp(section.name, ".code") == 0 && is_compressed) { - // Section is compressed, read compressed .code section... - std::unique_ptr temp_buffer; - try { - temp_buffer.reset(new u8[section.size]); - } catch (std::bad_alloc&) { - return ResultStatus::ErrorMemoryAllocationFailed; - } - - if (file.ReadBytes(&temp_buffer[0], section.size) != section.size) - return ResultStatus::Error; - - // Decompress .code section... - u32 decompressed_size = LZSS_GetDecompressedSize(&temp_buffer[0], section.size); - buffer.resize(decompressed_size); - if (!LZSS_Decompress(&temp_buffer[0], section.size, &buffer[0], decompressed_size)) - return ResultStatus::ErrorInvalidFormat; - } else { - // Section is uncompressed... - buffer.resize(section.size); - if (file.ReadBytes(&buffer[0], section.size) != section.size) - return ResultStatus::Error; - } - return ResultStatus::Success; - } - } - return ResultStatus::ErrorNotUsed; -} - -ResultStatus AppLoader_NCCH::LoadExeFS() { - if (is_exefs_loaded) - return ResultStatus::Success; - - if (!file.IsOpen()) - return ResultStatus::Error; - - // Reset read pointer in case this file has been read before. - file.Seek(0, SEEK_SET); - - if (file.ReadBytes(&ncch_header, sizeof(NCCH_Header)) != sizeof(NCCH_Header)) - return ResultStatus::Error; - - // Skip NCSD header and load first NCCH (NCSD is just a container of NCCH files)... - if (MakeMagic('N', 'C', 'S', 'D') == ncch_header.magic) { - LOG_DEBUG(Loader, "Only loading the first (bootable) NCCH within the NCSD file!"); - ncch_offset = 0x4000; - file.Seek(ncch_offset, SEEK_SET); - file.ReadBytes(&ncch_header, sizeof(NCCH_Header)); - } - - // Verify we are loading the correct file type... - if (MakeMagic('N', 'C', 'C', 'H') != ncch_header.magic) - return ResultStatus::ErrorInvalidFormat; - - // Read ExHeader... - - if (file.ReadBytes(&exheader_header, sizeof(ExHeader_Header)) != sizeof(ExHeader_Header)) - return ResultStatus::Error; - - is_compressed = (exheader_header.codeset_info.flags.flag & 1) == 1; - entry_point = exheader_header.codeset_info.text.address; - code_size = exheader_header.codeset_info.text.code_size; - stack_size = exheader_header.codeset_info.stack_size; - bss_size = exheader_header.codeset_info.bss_size; - core_version = exheader_header.arm11_system_local_caps.core_version; - priority = exheader_header.arm11_system_local_caps.priority; - resource_limit_category = exheader_header.arm11_system_local_caps.resource_limit_category; - - LOG_DEBUG(Loader, "Name: %s", exheader_header.codeset_info.name); - LOG_DEBUG(Loader, "Program ID: %016" PRIX64, ncch_header.program_id); - LOG_DEBUG(Loader, "Code compressed: %s", is_compressed ? "yes" : "no"); - LOG_DEBUG(Loader, "Entry point: 0x%08X", entry_point); - LOG_DEBUG(Loader, "Code size: 0x%08X", code_size); - LOG_DEBUG(Loader, "Stack size: 0x%08X", stack_size); - LOG_DEBUG(Loader, "Bss size: 0x%08X", bss_size); - LOG_DEBUG(Loader, "Core version: %d", core_version); - LOG_DEBUG(Loader, "Thread priority: 0x%X", priority); - LOG_DEBUG(Loader, "Resource limit category: %d", resource_limit_category); - LOG_DEBUG(Loader, "System Mode: %d", - static_cast(exheader_header.arm11_system_local_caps.system_mode)); - - if (exheader_header.arm11_system_local_caps.program_id != ncch_header.program_id) { - LOG_ERROR(Loader, "ExHeader Program ID mismatch: the ROM is probably encrypted."); - return ResultStatus::ErrorEncrypted; - } - - // Read ExeFS... - - exefs_offset = ncch_header.exefs_offset * kBlockSize; - u32 exefs_size = ncch_header.exefs_size * kBlockSize; - - LOG_DEBUG(Loader, "ExeFS offset: 0x%08X", exefs_offset); - LOG_DEBUG(Loader, "ExeFS size: 0x%08X", exefs_size); - - file.Seek(exefs_offset + ncch_offset, SEEK_SET); - if (file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)) != sizeof(ExeFs_Header)) - return ResultStatus::Error; - - is_exefs_loaded = true; - return ResultStatus::Success; -} - void AppLoader_NCCH::ParseRegionLockoutInfo() { std::vector smdh_buffer; if (ReadIcon(smdh_buffer) == ResultStatus::Success && smdh_buffer.size() >= sizeof(SMDH)) { @@ -339,23 +152,32 @@ void AppLoader_NCCH::ParseRegionLockoutInfo() { } ResultStatus AppLoader_NCCH::Load() { + u64_le ncch_program_id; + if (is_loaded) return ResultStatus::ErrorAlreadyLoaded; - ResultStatus result = LoadExeFS(); + ResultStatus result = base_ncch.Load(); if (result != ResultStatus::Success) return result; - std::string program_id{Common::StringFromFormat("%016" PRIX64, ncch_header.program_id)}; + ReadProgramId(ncch_program_id); + std::string program_id{Common::StringFromFormat("%016" PRIX64, ncch_program_id)}; LOG_INFO(Loader, "Program ID: %s", program_id.c_str()); + update_ncch.OpenFile(GetUpdateNCCHPath(ncch_program_id)); + result = update_ncch.Load(); + if (result == ResultStatus::Success) { + overlay_ncch = &update_ncch; + } + Core::Telemetry().AddField(Telemetry::FieldType::Session, "ProgramId", program_id); if (auto room_member = Network::GetRoomMember().lock()) { Network::GameInfo game_info; ReadTitle(game_info.name); - game_info.id = ncch_header.program_id; + game_info.id = ncch_program_id; room_member->SendGameInfo(game_info); } @@ -374,61 +196,40 @@ ResultStatus AppLoader_NCCH::Load() { } ResultStatus AppLoader_NCCH::ReadCode(std::vector& buffer) { - return LoadSectionExeFS(".code", buffer); + return overlay_ncch->LoadSectionExeFS(".code", buffer); } ResultStatus AppLoader_NCCH::ReadIcon(std::vector& buffer) { - return LoadSectionExeFS("icon", buffer); + return overlay_ncch->LoadSectionExeFS("icon", buffer); } ResultStatus AppLoader_NCCH::ReadBanner(std::vector& buffer) { - return LoadSectionExeFS("banner", buffer); + return overlay_ncch->LoadSectionExeFS("banner", buffer); } ResultStatus AppLoader_NCCH::ReadLogo(std::vector& buffer) { - return LoadSectionExeFS("logo", buffer); + return overlay_ncch->LoadSectionExeFS("logo", buffer); } ResultStatus AppLoader_NCCH::ReadProgramId(u64& out_program_id) { - if (!file.IsOpen()) - return ResultStatus::Error; - - ResultStatus result = LoadExeFS(); + ResultStatus result = base_ncch.ReadProgramId(out_program_id); if (result != ResultStatus::Success) return result; - out_program_id = ncch_header.program_id; return ResultStatus::Success; } ResultStatus AppLoader_NCCH::ReadRomFS(std::shared_ptr& romfs_file, u64& offset, u64& size) { - if (!file.IsOpen()) - return ResultStatus::Error; + return base_ncch.ReadRomFS(romfs_file, offset, size); +} - // Check if the NCCH has a RomFS... - if (ncch_header.romfs_offset != 0 && ncch_header.romfs_size != 0) { - u32 romfs_offset = ncch_offset + (ncch_header.romfs_offset * kBlockSize) + 0x1000; - u32 romfs_size = (ncch_header.romfs_size * kBlockSize) - 0x1000; +ResultStatus AppLoader_NCCH::ReadUpdateRomFS(std::shared_ptr& romfs_file, + u64& offset, u64& size) { + ResultStatus result = update_ncch.ReadRomFS(romfs_file, offset, size); - LOG_DEBUG(Loader, "RomFS offset: 0x%08X", romfs_offset); - LOG_DEBUG(Loader, "RomFS size: 0x%08X", romfs_size); - - if (file.GetSize() < romfs_offset + romfs_size) - return ResultStatus::Error; - - // We reopen the file, to allow its position to be independent from file's - romfs_file = std::make_shared(filepath, "rb"); - if (!romfs_file->IsOpen()) - return ResultStatus::Error; - - offset = romfs_offset; - size = romfs_size; - - return ResultStatus::Success; - } - LOG_DEBUG(Loader, "NCCH has no RomFS"); - return ResultStatus::ErrorNotUsed; + if (result != ResultStatus::Success) + return base_ncch.ReadRomFS(romfs_file, offset, size); } ResultStatus AppLoader_NCCH::ReadTitle(std::string& title) { diff --git a/src/core/loader/ncch.h b/src/core/loader/ncch.h index e40cef7649..9b56465cb2 100644 --- a/src/core/loader/ncch.h +++ b/src/core/loader/ncch.h @@ -5,154 +5,11 @@ #pragma once #include -#include "common/bit_field.h" #include "common/common_types.h" #include "common/swap.h" +#include "core/file_sys/ncch_container.h" #include "core/loader/loader.h" -//////////////////////////////////////////////////////////////////////////////////////////////////// -/// NCCH header (Note: "NCCH" appears to be a publicly unknown acronym) - -struct NCCH_Header { - u8 signature[0x100]; - u32_le magic; - u32_le content_size; - u8 partition_id[8]; - u16_le maker_code; - u16_le version; - u8 reserved_0[4]; - u64_le program_id; - u8 reserved_1[0x10]; - u8 logo_region_hash[0x20]; - u8 product_code[0x10]; - u8 extended_header_hash[0x20]; - u32_le extended_header_size; - u8 reserved_2[4]; - u8 flags[8]; - u32_le plain_region_offset; - u32_le plain_region_size; - u32_le logo_region_offset; - u32_le logo_region_size; - u32_le exefs_offset; - u32_le exefs_size; - u32_le exefs_hash_region_size; - u8 reserved_3[4]; - u32_le romfs_offset; - u32_le romfs_size; - u32_le romfs_hash_region_size; - u8 reserved_4[4]; - u8 exefs_super_block_hash[0x20]; - u8 romfs_super_block_hash[0x20]; -}; - -static_assert(sizeof(NCCH_Header) == 0x200, "NCCH header structure size is wrong"); - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ExeFS (executable file system) headers - -struct ExeFs_SectionHeader { - char name[8]; - u32 offset; - u32 size; -}; - -struct ExeFs_Header { - ExeFs_SectionHeader section[8]; - u8 reserved[0x80]; - u8 hashes[8][0x20]; -}; - -//////////////////////////////////////////////////////////////////////////////////////////////////// -// ExHeader (executable file system header) headers - -struct ExHeader_SystemInfoFlags { - u8 reserved[5]; - u8 flag; - u8 remaster_version[2]; -}; - -struct ExHeader_CodeSegmentInfo { - u32 address; - u32 num_max_pages; - u32 code_size; -}; - -struct ExHeader_CodeSetInfo { - u8 name[8]; - ExHeader_SystemInfoFlags flags; - ExHeader_CodeSegmentInfo text; - u32 stack_size; - ExHeader_CodeSegmentInfo ro; - u8 reserved[4]; - ExHeader_CodeSegmentInfo data; - u32 bss_size; -}; - -struct ExHeader_DependencyList { - u8 program_id[0x30][8]; -}; - -struct ExHeader_SystemInfo { - u64 save_data_size; - u8 jump_id[8]; - u8 reserved_2[0x30]; -}; - -struct ExHeader_StorageInfo { - u8 ext_save_data_id[8]; - u8 system_save_data_id[8]; - u8 reserved[8]; - u8 access_info[7]; - u8 other_attributes; -}; - -struct ExHeader_ARM11_SystemLocalCaps { - u64_le program_id; - u32_le core_version; - u8 reserved_flags[2]; - union { - u8 flags0; - BitField<0, 2, u8> ideal_processor; - BitField<2, 2, u8> affinity_mask; - BitField<4, 4, u8> system_mode; - }; - u8 priority; - u8 resource_limit_descriptor[0x10][2]; - ExHeader_StorageInfo storage_info; - u8 service_access_control[0x20][8]; - u8 ex_service_access_control[0x2][8]; - u8 reserved[0xf]; - u8 resource_limit_category; -}; - -struct ExHeader_ARM11_KernelCaps { - u32_le descriptors[28]; - u8 reserved[0x10]; -}; - -struct ExHeader_ARM9_AccessControl { - u8 descriptors[15]; - u8 descversion; -}; - -struct ExHeader_Header { - ExHeader_CodeSetInfo codeset_info; - ExHeader_DependencyList dependency_list; - ExHeader_SystemInfo system_info; - ExHeader_ARM11_SystemLocalCaps arm11_system_local_caps; - ExHeader_ARM11_KernelCaps arm11_kernel_caps; - ExHeader_ARM9_AccessControl arm9_access_control; - struct { - u8 signature[0x100]; - u8 ncch_public_key_modulus[0x100]; - ExHeader_ARM11_SystemLocalCaps arm11_system_local_caps; - ExHeader_ARM11_KernelCaps arm11_kernel_caps; - ExHeader_ARM9_AccessControl arm9_access_control; - } access_desc; -}; - -static_assert(sizeof(ExHeader_Header) == 0x800, "ExHeader structure size is wrong"); - //////////////////////////////////////////////////////////////////////////////////////////////////// // Loader namespace @@ -162,7 +19,8 @@ namespace Loader { class AppLoader_NCCH final : public AppLoader { public: AppLoader_NCCH(FileUtil::IOFile&& file, const std::string& filepath) - : AppLoader(std::move(file)), filepath(filepath) {} + : AppLoader(std::move(file)), filepath(filepath), base_ncch(filepath), + overlay_ncch(&base_ncch) {} /** * Returns the type of the file @@ -196,48 +54,24 @@ public: ResultStatus ReadRomFS(std::shared_ptr& romfs_file, u64& offset, u64& size) override; + ResultStatus ReadUpdateRomFS(std::shared_ptr& romfs_file, u64& offset, + u64& size) override; + ResultStatus ReadTitle(std::string& title) override; private: - /** - * Reads an application ExeFS section of an NCCH file into AppLoader (e.g. .code, .logo, etc.) - * @param name Name of section to read out of NCCH file - * @param buffer Vector to read data into - * @return ResultStatus result of function - */ - ResultStatus LoadSectionExeFS(const char* name, std::vector& buffer); - /** * Loads .code section into memory for booting * @return ResultStatus result of function */ ResultStatus LoadExec(); - /** - * Ensure ExeFS is loaded and ready for reading sections - * @return ResultStatus result of function - */ - ResultStatus LoadExeFS(); - /// Reads the region lockout info in the SMDH and send it to CFG service void ParseRegionLockoutInfo(); - bool is_exefs_loaded = false; - bool is_compressed = false; - - u32 entry_point = 0; - u32 code_size = 0; - u32 stack_size = 0; - u32 bss_size = 0; - u32 core_version = 0; - u8 priority = 0; - u8 resource_limit_category = 0; - u32 ncch_offset = 0; // Offset to NCCH header, can be 0 or after NCSD header - u32 exefs_offset = 0; - - NCCH_Header ncch_header; - ExeFs_Header exefs_header; - ExHeader_Header exheader_header; + FileSys::NCCHContainer base_ncch; + FileSys::NCCHContainer update_ncch; + FileSys::NCCHContainer* overlay_ncch; std::string filepath; }; From 774e7deae8655a6f09530770c56ae2e75d55309b Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 23 Sep 2017 20:32:18 -0500 Subject: [PATCH 161/195] HLE/Archives: Allow multiple loaded applications to access their SelfNCCH archive independently. The loaders now register each loaded ROM with the SelfNCCH factory, which keeps the data around for the duration of the emulation session. When opening the SelfNCCH archive, the factory queries the current program's programid and uses that as a key to the map that contains the NCCHData structure (RomFS, Icon, Banner, etc). 3dsx files do not have a programid and will use a default of 0 for this value, thus, only 1 3dsx file with RomFS is loadable at the same time. --- src/core/file_sys/archive_selfncch.cpp | 45 +++++++++++++++++++------- src/core/file_sys/archive_selfncch.h | 9 ++++-- src/core/hle/service/fs/archive.cpp | 18 ++++++++++- src/core/hle/service/fs/archive.h | 7 ++++ src/core/loader/3dsx.cpp | 3 +- src/core/loader/ncch.cpp | 3 +- 6 files changed, 66 insertions(+), 19 deletions(-) diff --git a/src/core/file_sys/archive_selfncch.cpp b/src/core/file_sys/archive_selfncch.cpp index 7dc91a4050..a16941c70e 100644 --- a/src/core/file_sys/archive_selfncch.cpp +++ b/src/core/file_sys/archive_selfncch.cpp @@ -3,12 +3,14 @@ // Refer to the license.txt file included. #include +#include #include "common/common_types.h" #include "common/logging/log.h" #include "common/swap.h" #include "core/file_sys/archive_selfncch.h" #include "core/file_sys/errors.h" #include "core/file_sys/ivfc_archive.h" +#include "core/hle/kernel/process.h" //////////////////////////////////////////////////////////////////////////////////////////////////// // FileSys namespace @@ -227,38 +229,57 @@ private: NCCHData ncch_data; }; -ArchiveFactory_SelfNCCH::ArchiveFactory_SelfNCCH(Loader::AppLoader& app_loader) { - std::shared_ptr romfs_file; - if (Loader::ResultStatus::Success == - app_loader.ReadRomFS(romfs_file, ncch_data.romfs_offset, ncch_data.romfs_size)) { +void ArchiveFactory_SelfNCCH::Register(Loader::AppLoader& app_loader) { + u64 program_id = 0; + if (app_loader.ReadProgramId(program_id) != Loader::ResultStatus::Success) { + LOG_WARNING( + Service_FS, + "Could not read program id when registering with SelfNCCH, this might be a 3dsx file"); + } - ncch_data.romfs_file = std::move(romfs_file); + LOG_DEBUG(Service_FS, "Registering program %016" PRIX64 " with the SelfNCCH archive factory", + program_id); + + if (ncch_data.find(program_id) != ncch_data.end()) { + LOG_WARNING(Service_FS, "Registering program %016" PRIX64 + " with SelfNCCH will override existing mapping", + program_id); + } + + NCCHData& data = ncch_data[program_id]; + + std::shared_ptr romfs_file_; + if (Loader::ResultStatus::Success == + app_loader.ReadRomFS(romfs_file_, data.romfs_offset, data.romfs_size)) { + + data.romfs_file = std::move(romfs_file_); } std::shared_ptr update_romfs_file; if (Loader::ResultStatus::Success == - app_loader.ReadUpdateRomFS(update_romfs_file, ncch_data.update_romfs_offset, - ncch_data.update_romfs_size)) { + app_loader.ReadUpdateRomFS(update_romfs_file, data.update_romfs_offset, + data.update_romfs_size)) { - ncch_data.update_romfs_file = std::move(update_romfs_file); + data.update_romfs_file = std::move(update_romfs_file); } std::vector buffer; if (Loader::ResultStatus::Success == app_loader.ReadIcon(buffer)) - ncch_data.icon = std::make_shared>(std::move(buffer)); + data.icon = std::make_shared>(std::move(buffer)); buffer.clear(); if (Loader::ResultStatus::Success == app_loader.ReadLogo(buffer)) - ncch_data.logo = std::make_shared>(std::move(buffer)); + data.logo = std::make_shared>(std::move(buffer)); buffer.clear(); if (Loader::ResultStatus::Success == app_loader.ReadBanner(buffer)) - ncch_data.banner = std::make_shared>(std::move(buffer)); + data.banner = std::make_shared>(std::move(buffer)); } ResultVal> ArchiveFactory_SelfNCCH::Open(const Path& path) { - auto archive = std::make_unique(ncch_data); + auto archive = std::make_unique( + ncch_data[Kernel::g_current_process->codeset->program_id]); return MakeResult>(std::move(archive)); } diff --git a/src/core/file_sys/archive_selfncch.h b/src/core/file_sys/archive_selfncch.h index f1c6599481..0d6d6766ee 100644 --- a/src/core/file_sys/archive_selfncch.h +++ b/src/core/file_sys/archive_selfncch.h @@ -6,6 +6,7 @@ #include #include +#include #include #include "common/common_types.h" #include "core/file_sys/archive_backend.h" @@ -33,7 +34,10 @@ struct NCCHData { /// File system interface to the SelfNCCH archive class ArchiveFactory_SelfNCCH final : public ArchiveFactory { public: - explicit ArchiveFactory_SelfNCCH(Loader::AppLoader& app_loader); + ArchiveFactory_SelfNCCH() = default; + + /// Registers a loaded application so that we can open its SelfNCCH archive when requested. + void Register(Loader::AppLoader& app_loader); std::string GetName() const override { return "SelfNCCH"; @@ -43,7 +47,8 @@ public: ResultVal GetFormatInfo(const Path& path) const override; private: - NCCHData ncch_data; + /// Mapping of ProgramId -> NCCHData + std::unordered_map ncch_data; }; } // namespace FileSys diff --git a/src/core/hle/service/fs/archive.cpp b/src/core/hle/service/fs/archive.cpp index 033fbc9aa8..4ccb3cd32a 100644 --- a/src/core/hle/service/fs/archive.cpp +++ b/src/core/hle/service/fs/archive.cpp @@ -20,6 +20,7 @@ #include "core/file_sys/archive_savedata.h" #include "core/file_sys/archive_sdmc.h" #include "core/file_sys/archive_sdmcwriteonly.h" +#include "core/file_sys/archive_selfncch.h" #include "core/file_sys/archive_systemsavedata.h" #include "core/file_sys/directory_backend.h" #include "core/file_sys/errors.h" @@ -48,7 +49,7 @@ struct hash { return std::hash()(static_cast(id_code)); } }; -} +} // namespace std static constexpr Kernel::Handle INVALID_HANDLE{}; @@ -564,6 +565,21 @@ void RegisterArchiveTypes() { auto systemsavedata_factory = std::make_unique(nand_directory); RegisterArchiveType(std::move(systemsavedata_factory), ArchiveIdCode::SystemSaveData); + + auto selfncch_factory = std::make_unique(); + RegisterArchiveType(std::move(selfncch_factory), ArchiveIdCode::SelfNCCH); +} + +void RegisterSelfNCCH(Loader::AppLoader& app_loader) { + auto itr = id_code_map.find(ArchiveIdCode::SelfNCCH); + if (itr == id_code_map.end()) { + LOG_ERROR(Service_FS, + "Could not register a new NCCH because the SelfNCCH archive hasn't been created"); + return; + } + + auto* factory = static_cast(itr->second.get()); + factory->Register(app_loader); } void UnregisterArchiveTypes() { diff --git a/src/core/hle/service/fs/archive.h b/src/core/hle/service/fs/archive.h index 3a3371c882..e3c8fc2ef4 100644 --- a/src/core/hle/service/fs/archive.h +++ b/src/core/hle/service/fs/archive.h @@ -21,6 +21,10 @@ static constexpr char SYSTEM_ID[]{"00000000000000000000000000000000"}; /// The scrambled SD card CID, also known as ID1 static constexpr char SDCARD_ID[]{"00000000000000000000000000000000"}; +namespace Loader { +class AppLoader; +} + namespace Service { namespace FS { @@ -259,6 +263,9 @@ void ArchiveInit(); /// Shutdown archives void ArchiveShutdown(); +/// Registers a new NCCH file with the SelfNCCH archive factory +void RegisterSelfNCCH(Loader::AppLoader& app_loader); + /// Register all archive types void RegisterArchiveTypes(); diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp index a03515e6ec..5ad5c52876 100644 --- a/src/core/loader/3dsx.cpp +++ b/src/core/loader/3dsx.cpp @@ -278,8 +278,7 @@ ResultStatus AppLoader_THREEDSX::Load() { Kernel::g_current_process->Run(48, Kernel::DEFAULT_STACK_SIZE); - Service::FS::RegisterArchiveType(std::make_unique(*this), - Service::FS::ArchiveIdCode::SelfNCCH); + Service::FS::RegisterSelfNCCH(*this); is_loaded = true; return ResultStatus::Success; diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index c46d7cfc66..5107135f98 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -187,8 +187,7 @@ ResultStatus AppLoader_NCCH::Load() { if (ResultStatus::Success != result) return result; - Service::FS::RegisterArchiveType(std::make_unique(*this), - Service::FS::ArchiveIdCode::SelfNCCH); + Service::FS::RegisterSelfNCCH(*this); ParseRegionLockoutInfo(); From d7459354f58d1b71fc0c5ec48de9242e6a2fd00c Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 25 Sep 2017 13:06:42 -0500 Subject: [PATCH 162/195] Audio: Use std::deque instead of std::vector for the audio buffer type (StereoBuffer16). The current code inserts and deletes elements from the beginning of the audio buffer, which is very inefficient in an std::vector. Profiling was done using VisualStudio2017's Performance Analyzer in Super Mario 3D Land. Before this change: AudioInterp::Linear had 14.14% of the runtime (inclusive) and most of that time was spent in std::vector's insert implementation. After this change: AudioInterp::Linear has 0.36% of the runtime (inclusive) --- src/audio_core/codec.cpp | 4 +++- src/audio_core/codec.h | 4 ++-- src/audio_core/hle/source.h | 2 +- src/audio_core/interpolate.cpp | 2 +- src/audio_core/interpolate.h | 4 ++-- 5 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/audio_core/codec.cpp b/src/audio_core/codec.cpp index 7a3bd7eb3e..6fba9fdae7 100644 --- a/src/audio_core/codec.cpp +++ b/src/audio_core/codec.cpp @@ -117,7 +117,9 @@ StereoBuffer16 DecodePCM16(const unsigned num_channels, const u8* const data, ret[i].fill(sample); } } else { - std::memcpy(ret.data(), data, sample_count * 2 * sizeof(u16)); + for (size_t i = 0; i < sample_count; ++i) { + std::memcpy(&ret[i], data + i * sizeof(s16) * 2, 2 * sizeof(s16)); + } } return ret; diff --git a/src/audio_core/codec.h b/src/audio_core/codec.h index 2b0c395e69..877b2202d4 100644 --- a/src/audio_core/codec.h +++ b/src/audio_core/codec.h @@ -5,13 +5,13 @@ #pragma once #include -#include +#include #include "common/common_types.h" namespace Codec { /// A variable length buffer of signed PCM16 stereo samples. -using StereoBuffer16 = std::vector>; +using StereoBuffer16 = std::deque>; /// See: Codec::DecodeADPCM struct ADPCMState { diff --git a/src/audio_core/hle/source.h b/src/audio_core/hle/source.h index ccb7f064fd..c4d2debc23 100644 --- a/src/audio_core/hle/source.h +++ b/src/audio_core/hle/source.h @@ -108,7 +108,7 @@ private: u32 current_sample_number = 0; u32 next_sample_number = 0; - std::vector> current_buffer; + AudioInterp::StereoBuffer16 current_buffer; // buffer_id state diff --git a/src/audio_core/interpolate.cpp b/src/audio_core/interpolate.cpp index 16e68bc5c4..83573d7721 100644 --- a/src/audio_core/interpolate.cpp +++ b/src/audio_core/interpolate.cpp @@ -47,7 +47,7 @@ static void StepOverSamples(State& state, StereoBuffer16& input, float rate, state.xn1 = input[inputi + 1]; state.fposition = fposition - inputi * scale_factor; - input.erase(input.begin(), input.begin() + inputi + 2); + input.erase(input.begin(), std::next(input.begin(), inputi + 2)); } void None(State& state, StereoBuffer16& input, float rate, DSP::HLE::StereoFrame16& output, diff --git a/src/audio_core/interpolate.h b/src/audio_core/interpolate.h index 59f59bc141..8dff6111a3 100644 --- a/src/audio_core/interpolate.h +++ b/src/audio_core/interpolate.h @@ -5,14 +5,14 @@ #pragma once #include -#include +#include #include "audio_core/hle/common.h" #include "common/common_types.h" namespace AudioInterp { /// A variable length buffer of signed PCM16 stereo samples. -using StereoBuffer16 = std::vector>; +using StereoBuffer16 = std::deque>; struct State { /// Two historical samples. From 41f6c9f87f3cd231954cd401be39653c4f78740a Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 24 Sep 2017 20:52:46 -0500 Subject: [PATCH 163/195] Memory/RasterizerCache: Ignore unmapped memory regions when caching physical regions. Not all physical regions need to be mapped into the address space of every process, for example, system modules do not have a VRAM mapping. This fixes a crash when loading applets and system modules. --- src/core/memory.cpp | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 68a6b1ac26..2f5cdcefe4 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -316,8 +316,15 @@ void RasterizerMarkRegionCached(PAddr start, u32 size, int count_delta) { for (unsigned i = 0; i < num_pages; ++i, paddr += PAGE_SIZE) { boost::optional maybe_vaddr = PhysicalToVirtualAddress(paddr); - if (!maybe_vaddr) + // While the physical <-> virtual mapping is 1:1 for the regions supported by the cache, + // some games (like Pokemon Super Mystery Dungeon) will try to use textures that go beyond + // the end address of VRAM, causing the Virtual->Physical translation to fail when flushing + // parts of the texture. + if (!maybe_vaddr) { + LOG_ERROR(HW_Memory, + "Trying to flush a cached region to an invalid physical address %08X", paddr); continue; + } VAddr vaddr = *maybe_vaddr; u8& res_count = current_page_table->cached_res_count[vaddr >> PAGE_BITS]; @@ -329,6 +336,10 @@ void RasterizerMarkRegionCached(PAddr start, u32 size, int count_delta) { if (res_count == 0) { PageType& page_type = current_page_table->attributes[vaddr >> PAGE_BITS]; switch (page_type) { + case PageType::Unmapped: + // It is not necessary for a process to have this region mapped into its address + // space, for example, a system module need not have a VRAM mapping. + break; case PageType::Memory: page_type = PageType::RasterizerCachedMemory; current_page_table->pointers[vaddr >> PAGE_BITS] = nullptr; @@ -347,6 +358,10 @@ void RasterizerMarkRegionCached(PAddr start, u32 size, int count_delta) { if (res_count == 0) { PageType& page_type = current_page_table->attributes[vaddr >> PAGE_BITS]; switch (page_type) { + case PageType::Unmapped: + // It is not necessary for a process to have this region mapped into its address + // space, for example, a system module need not have a VRAM mapping. + break; case PageType::RasterizerCachedMemory: { u8* pointer = GetPointerFromVMA(vaddr & ~PAGE_MASK); if (pointer == nullptr) { From e27ae046960e20144892cf8252d8a672a48b0123 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 24 Sep 2017 19:09:13 -0500 Subject: [PATCH 164/195] HLE/APT: Always set up the APT parameter when starting a library applet. Only use the HLE interface if an HLE applet with the desired id was started. This commit reorganizes the APT code surrounding parameter creation and delivery to make it easier to support LLE applets in the future. As future work, the HLE applet interface can be reworked to utilize the same facilities as the LLE interface. --- src/core/hle/service/apt/apt.cpp | 73 ++++++++++++++++++------------ src/core/hle/service/apt/apt_s.cpp | 4 +- 2 files changed, 47 insertions(+), 30 deletions(-) diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 8c0ba73f2a..c36775473d 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -165,7 +165,11 @@ void SendParameter(const MessageParameter& parameter) { next_parameter = parameter; // Signal the event to let the receiver know that a new parameter is ready to be read auto* const slot_data = GetAppletSlotData(static_cast(parameter.destination_id)); - ASSERT(slot_data); + if (slot_data == nullptr) { + LOG_DEBUG(Service_APT, "No applet was registered with the id %03X", + parameter.destination_id); + return; + } slot_data->parameter_event->Signal(); } @@ -486,9 +490,6 @@ void SendParameter(Service::Interface* self) { size_t size; VAddr buffer = rp.PopStaticBuffer(&size); - std::shared_ptr dest_applet = - HLE::Applets::Applet::Get(static_cast(dst_app_id)); - LOG_DEBUG(Service_APT, "called src_app_id=0x%08X, dst_app_id=0x%08X, signal_type=0x%08X," "buffer_size=0x%08X, handle=0x%08X, size=0x%08zX, in_param_buffer_ptr=0x%08X", @@ -503,12 +504,6 @@ void SendParameter(Service::Interface* self) { return; } - if (dest_applet == nullptr) { - LOG_ERROR(Service_APT, "Unknown applet id=0x%08X", dst_app_id); - rb.Push(-1); // TODO(Subv): Find the right error code - return; - } - MessageParameter param; param.destination_id = dst_app_id; param.sender_id = src_app_id; @@ -517,7 +512,14 @@ void SendParameter(Service::Interface* self) { param.buffer.resize(buffer_size); Memory::ReadBlock(buffer, param.buffer.data(), param.buffer.size()); - rb.Push(dest_applet->ReceiveParameter(param)); + SendParameter(param); + + // If the applet is running in HLE mode, use the HLE interface to communicate with it. + if (auto dest_applet = HLE::Applets::Applet::Get(static_cast(dst_app_id))) { + rb.Push(dest_applet->ReceiveParameter(param)); + } else { + rb.Push(RESULT_SUCCESS); + } } void ReceiveParameter(Service::Interface* self) { @@ -746,7 +748,12 @@ void PrepareToStartLibraryApplet(Service::Interface* self) { IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x18, 1, 0); // 0x180040 AppletId applet_id = static_cast(rp.Pop()); + LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); + IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); + + // TODO(Subv): Launch the requested applet application. + auto applet = HLE::Applets::Applet::Get(applet_id); if (applet) { LOG_WARNING(Service_APT, "applet has already been started id=%08X", applet_id); @@ -754,14 +761,18 @@ void PrepareToStartLibraryApplet(Service::Interface* self) { } else { rb.Push(HLE::Applets::Applet::Create(applet_id)); } - LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); } void PreloadLibraryApplet(Service::Interface* self) { IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x16, 1, 0); // 0x160040 AppletId applet_id = static_cast(rp.Pop()); + LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); + IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); + + // TODO(Subv): Launch the requested applet application. + auto applet = HLE::Applets::Applet::Get(applet_id); if (applet) { LOG_WARNING(Service_APT, "applet has already been started id=%08X", applet_id); @@ -769,34 +780,40 @@ void PreloadLibraryApplet(Service::Interface* self) { } else { rb.Push(HLE::Applets::Applet::Create(applet_id)); } - LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); } void StartLibraryApplet(Service::Interface* self) { IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x1E, 2, 4); // 0x1E0084 AppletId applet_id = static_cast(rp.Pop()); - std::shared_ptr applet = HLE::Applets::Applet::Get(applet_id); - - LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); - - if (applet == nullptr) { - LOG_ERROR(Service_APT, "unknown applet id=%08X", applet_id); - IPC::RequestBuilder rb = rp.MakeBuilder(1, 0, false); - rb.Push(-1); // TODO(Subv): Find the right error code - return; - } size_t buffer_size = rp.Pop(); Kernel::Handle handle = rp.PopHandle(); VAddr buffer_addr = rp.PopStaticBuffer(); - AppletStartupParameter parameter; - parameter.object = Kernel::g_handle_table.GetGeneric(handle); - parameter.buffer.resize(buffer_size); - Memory::ReadBlock(buffer_addr, parameter.buffer.data(), parameter.buffer.size()); + LOG_DEBUG(Service_APT, "called applet_id=%08X", applet_id); IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); - rb.Push(applet->Start(parameter)); + + // Send the Wakeup signal to the applet + MessageParameter param; + param.destination_id = static_cast(applet_id); + param.sender_id = static_cast(AppletId::Application); + param.object = Kernel::g_handle_table.GetGeneric(handle); + param.signal = static_cast(SignalType::Wakeup); + param.buffer.resize(buffer_size); + Memory::ReadBlock(buffer_addr, param.buffer.data(), param.buffer.size()); + SendParameter(param); + + // In case the applet is being HLEd, attempt to communicate with it. + if (auto applet = HLE::Applets::Applet::Get(applet_id)) { + AppletStartupParameter parameter; + parameter.object = Kernel::g_handle_table.GetGeneric(handle); + parameter.buffer.resize(buffer_size); + Memory::ReadBlock(buffer_addr, parameter.buffer.data(), parameter.buffer.size()); + rb.Push(applet->Start(parameter)); + } else { + rb.Push(RESULT_SUCCESS); + } } void CancelLibraryApplet(Service::Interface* self) { diff --git a/src/core/hle/service/apt/apt_s.cpp b/src/core/hle/service/apt/apt_s.cpp index ec5668d05f..cf74c2a364 100644 --- a/src/core/hle/service/apt/apt_s.cpp +++ b/src/core/hle/service/apt/apt_s.cpp @@ -20,7 +20,7 @@ const Interface::FunctionInfo FunctionTable[] = { {0x00090040, nullptr, "IsRegistered"}, {0x000A0040, nullptr, "GetAttribute"}, {0x000B0040, InquireNotification, "InquireNotification"}, - {0x000C0104, nullptr, "SendParameter"}, + {0x000C0104, SendParameter, "SendParameter"}, {0x000D0080, ReceiveParameter, "ReceiveParameter"}, {0x000E0080, GlanceParameter, "GlanceParameter"}, {0x000F0100, nullptr, "CancelParameter"}, @@ -38,7 +38,7 @@ const Interface::FunctionInfo FunctionTable[] = { {0x001B00C4, nullptr, "StartApplication"}, {0x001C0000, nullptr, "WakeupApplication"}, {0x001D0000, nullptr, "CancelApplication"}, - {0x001E0084, nullptr, "StartLibraryApplet"}, + {0x001E0084, StartLibraryApplet, "StartLibraryApplet"}, {0x001F0084, nullptr, "StartSystemApplet"}, {0x00200044, nullptr, "StartNewestHomeMenu"}, {0x00210000, nullptr, "OrderToCloseApplication"}, From 35da7f57efd5153be37a05ffcbb57412da74265a Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 26 Sep 2017 17:27:44 -0500 Subject: [PATCH 165/195] Memory: Allow IsValidVirtualAddress to be called with a specific process parameter. There is still an overload of IsValidVirtualAddress that only takes the VAddr and will default to the current process. --- src/core/memory.cpp | 25 ++++++++++++++++++------- src/core/memory.h | 7 +++++++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/src/core/memory.cpp b/src/core/memory.cpp index a6b5f6c999..c42f4326b2 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -110,8 +110,8 @@ static u8* GetPointerFromVMA(VAddr vaddr) { /** * This function should only be called for virtual addreses with attribute `PageType::Special`. */ -static MMIORegionPointer GetMMIOHandler(VAddr vaddr) { - for (const auto& region : current_page_table->special_regions) { +static MMIORegionPointer GetMMIOHandler(const PageTable& page_table, VAddr vaddr) { + for (const auto& region : page_table.special_regions) { if (vaddr >= region.base && vaddr < (region.base + region.size)) { return region.handler; } @@ -120,6 +120,11 @@ static MMIORegionPointer GetMMIOHandler(VAddr vaddr) { return nullptr; // Should never happen } +static MMIORegionPointer GetMMIOHandler(VAddr vaddr) { + const PageTable& page_table = Kernel::g_current_process->vm_manager.page_table; + return GetMMIOHandler(page_table, vaddr); +} + template T ReadMMIO(MMIORegionPointer mmio_handler, VAddr addr); @@ -204,18 +209,20 @@ void Write(const VAddr vaddr, const T data) { } } -bool IsValidVirtualAddress(const VAddr vaddr) { - const u8* page_pointer = current_page_table->pointers[vaddr >> PAGE_BITS]; +bool IsValidVirtualAddress(const Kernel::Process& process, const VAddr vaddr) { + auto& page_table = process.vm_manager.page_table; + + const u8* page_pointer = page_table.pointers[vaddr >> PAGE_BITS]; if (page_pointer) return true; - if (current_page_table->attributes[vaddr >> PAGE_BITS] == PageType::RasterizerCachedMemory) + if (page_table.attributes[vaddr >> PAGE_BITS] == PageType::RasterizerCachedMemory) return true; - if (current_page_table->attributes[vaddr >> PAGE_BITS] != PageType::Special) + if (page_table.attributes[vaddr >> PAGE_BITS] != PageType::Special) return false; - MMIORegionPointer mmio_region = GetMMIOHandler(vaddr); + MMIORegionPointer mmio_region = GetMMIOHandler(page_table, vaddr); if (mmio_region) { return mmio_region->IsValidAddress(vaddr); } @@ -223,6 +230,10 @@ bool IsValidVirtualAddress(const VAddr vaddr) { return false; } +bool IsValidVirtualAddress(const VAddr vaddr) { + return IsValidVirtualAddress(*Kernel::g_current_process, vaddr); +} + bool IsValidPhysicalAddress(const PAddr paddr) { return GetPhysicalPointer(paddr) != nullptr; } diff --git a/src/core/memory.h b/src/core/memory.h index 1865bfea04..347c08c781 100644 --- a/src/core/memory.h +++ b/src/core/memory.h @@ -12,6 +12,10 @@ #include "common/common_types.h" #include "core/mmio.h" +namespace Kernel { +class Process; +} + namespace Memory { /** @@ -185,7 +189,10 @@ enum : VAddr { void SetCurrentPageTable(PageTable* page_table); PageTable* GetCurrentPageTable(); +/// Determines if the given VAddr is valid for the specified process. +bool IsValidVirtualAddress(const Kernel::Process& process, const VAddr vaddr); bool IsValidVirtualAddress(const VAddr addr); + bool IsValidPhysicalAddress(const PAddr addr); u8 Read8(VAddr addr); From c102e3ae282ae849667ae91f5f0213a80adf474f Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 26 Sep 2017 17:29:06 -0500 Subject: [PATCH 166/195] Tests: Fixed ARM VFP tests --- src/tests/core/arm/arm_test_common.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/tests/core/arm/arm_test_common.cpp b/src/tests/core/arm/arm_test_common.cpp index cfe0d503ae..484713a92c 100644 --- a/src/tests/core/arm/arm_test_common.cpp +++ b/src/tests/core/arm/arm_test_common.cpp @@ -3,30 +3,34 @@ // Refer to the license.txt file included. #include "core/core.h" +#include "core/hle/kernel/process.h" #include "core/memory.h" #include "core/memory_setup.h" #include "tests/core/arm/arm_test_common.h" namespace ArmTests { -static Memory::PageTable page_table; +static Memory::PageTable* page_table = nullptr; TestEnvironment::TestEnvironment(bool mutable_memory_) : mutable_memory(mutable_memory_), test_memory(std::make_shared(this)) { - page_table.pointers.fill(nullptr); - page_table.attributes.fill(Memory::PageType::Unmapped); - page_table.cached_res_count.fill(0); + Kernel::g_current_process = Kernel::Process::Create(Kernel::CodeSet::Create("", 0)); + page_table = &Kernel::g_current_process->vm_manager.page_table; - Memory::MapIoRegion(page_table, 0x00000000, 0x80000000, test_memory); - Memory::MapIoRegion(page_table, 0x80000000, 0x80000000, test_memory); + page_table->pointers.fill(nullptr); + page_table->attributes.fill(Memory::PageType::Unmapped); + page_table->cached_res_count.fill(0); - Memory::SetCurrentPageTable(&page_table); + Memory::MapIoRegion(*page_table, 0x00000000, 0x80000000, test_memory); + Memory::MapIoRegion(*page_table, 0x80000000, 0x80000000, test_memory); + + Memory::SetCurrentPageTable(page_table); } TestEnvironment::~TestEnvironment() { - Memory::UnmapRegion(page_table, 0x80000000, 0x80000000); - Memory::UnmapRegion(page_table, 0x00000000, 0x80000000); + Memory::UnmapRegion(*page_table, 0x80000000, 0x80000000); + Memory::UnmapRegion(*page_table, 0x00000000, 0x80000000); } void TestEnvironment::SetMemory64(VAddr vaddr, u64 value) { From a8d2f5787f998e08eccaa66c2fe0cdab997c2253 Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 26 Sep 2017 17:31:50 -0500 Subject: [PATCH 167/195] Tests: Added Memory::IsValidVirtualAddress tests. --- src/tests/CMakeLists.txt | 1 + src/tests/core/memory/memory.cpp | 56 ++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 src/tests/core/memory/memory.cpp diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 5e9c4c2bff..1aac0daa23 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -4,6 +4,7 @@ set(SRCS core/arm/dyncom/arm_dyncom_vfp_tests.cpp core/file_sys/path_parser.cpp core/hle/kernel/hle_ipc.cpp + core/memory/memory.cpp glad.cpp tests.cpp ) diff --git a/src/tests/core/memory/memory.cpp b/src/tests/core/memory/memory.cpp new file mode 100644 index 0000000000..a01b896f70 --- /dev/null +++ b/src/tests/core/memory/memory.cpp @@ -0,0 +1,56 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include +#include "core/hle/kernel/memory.h" +#include "core/hle/kernel/process.h" +#include "core/memory.h" + +TEST_CASE("Memory::IsValidVirtualAddress", "[core][memory]") { + SECTION("these regions should not be mapped on an empty process") { + auto process = Kernel::Process::Create(Kernel::CodeSet::Create("", 0)); + CHECK(Memory::IsValidVirtualAddress(*process, Memory::PROCESS_IMAGE_VADDR) == false); + CHECK(Memory::IsValidVirtualAddress(*process, Memory::HEAP_VADDR) == false); + CHECK(Memory::IsValidVirtualAddress(*process, Memory::LINEAR_HEAP_VADDR) == false); + CHECK(Memory::IsValidVirtualAddress(*process, Memory::VRAM_VADDR) == false); + CHECK(Memory::IsValidVirtualAddress(*process, Memory::CONFIG_MEMORY_VADDR) == false); + CHECK(Memory::IsValidVirtualAddress(*process, Memory::SHARED_PAGE_VADDR) == false); + CHECK(Memory::IsValidVirtualAddress(*process, Memory::TLS_AREA_VADDR) == false); + } + + SECTION("CONFIG_MEMORY_VADDR and SHARED_PAGE_VADDR should be valid after mapping them") { + auto process = Kernel::Process::Create(Kernel::CodeSet::Create("", 0)); + Kernel::MapSharedPages(process->vm_manager); + CHECK(Memory::IsValidVirtualAddress(*process, Memory::CONFIG_MEMORY_VADDR) == true); + CHECK(Memory::IsValidVirtualAddress(*process, Memory::SHARED_PAGE_VADDR) == true); + } + + SECTION("special regions should be valid after mapping them") { + auto process = Kernel::Process::Create(Kernel::CodeSet::Create("", 0)); + SECTION("VRAM") { + Kernel::HandleSpecialMapping(process->vm_manager, + {Memory::VRAM_VADDR, Memory::VRAM_SIZE, false, false}); + CHECK(Memory::IsValidVirtualAddress(*process, Memory::VRAM_VADDR) == true); + } + + SECTION("IO (Not yet implemented)") { + Kernel::HandleSpecialMapping( + process->vm_manager, {Memory::IO_AREA_VADDR, Memory::IO_AREA_SIZE, false, false}); + CHECK_FALSE(Memory::IsValidVirtualAddress(*process, Memory::IO_AREA_VADDR) == true); + } + + SECTION("DSP") { + Kernel::HandleSpecialMapping( + process->vm_manager, {Memory::DSP_RAM_VADDR, Memory::DSP_RAM_SIZE, false, false}); + CHECK(Memory::IsValidVirtualAddress(*process, Memory::DSP_RAM_VADDR) == true); + } + } + + SECTION("Unmapping a VAddr should make it invalid") { + auto process = Kernel::Process::Create(Kernel::CodeSet::Create("", 0)); + Kernel::MapSharedPages(process->vm_manager); + process->vm_manager.UnmapRange(Memory::CONFIG_MEMORY_VADDR, Memory::CONFIG_MEMORY_SIZE); + CHECK(Memory::IsValidVirtualAddress(*process, Memory::CONFIG_MEMORY_VADDR) == false); + } +} From 3165466b665185ecbc3e33b02b0b90e25e7248ba Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 26 Sep 2017 17:40:49 -0500 Subject: [PATCH 168/195] Kernel/Thread: Allow specifying which process a thread belongs to when creating it. Don't automatically assume that Thread::Create will only be called when the parent process is currently scheduled. This assumption will be broken when applets or system modules are loaded. --- src/core/hle/kernel/process.cpp | 2 +- src/core/hle/kernel/thread.cpp | 17 +++++++++-------- src/core/hle/kernel/thread.h | 15 +++++++++------ src/core/hle/svc.cpp | 5 +++-- 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/src/core/hle/kernel/process.cpp b/src/core/hle/kernel/process.cpp index 522ad2333c..cf3163e0fe 100644 --- a/src/core/hle/kernel/process.cpp +++ b/src/core/hle/kernel/process.cpp @@ -147,7 +147,7 @@ void Process::Run(s32 main_thread_priority, u32 stack_size) { } vm_manager.LogLayout(Log::Level::Debug); - Kernel::SetupMainThread(codeset->entrypoint, main_thread_priority); + Kernel::SetupMainThread(codeset->entrypoint, main_thread_priority, this); } VAddr Process::GetLinearHeapAreaAddress() const { diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 61378211fc..1033f8552e 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -361,7 +361,8 @@ static void ResetThreadContext(ARM_Interface::ThreadContext& context, u32 stack_ } ResultVal> Thread::Create(std::string name, VAddr entry_point, u32 priority, - u32 arg, s32 processor_id, VAddr stack_top) { + u32 arg, s32 processor_id, VAddr stack_top, + SharedPtr owner_process) { // Check if priority is in ranged. Lowest priority -> highest priority id. if (priority > THREADPRIO_LOWEST) { LOG_ERROR(Kernel_SVC, "Invalid thread priority: %d", priority); @@ -375,7 +376,7 @@ ResultVal> Thread::Create(std::string name, VAddr entry_point, // TODO(yuriks): Other checks, returning 0xD9001BEA - if (!Memory::IsValidVirtualAddress(entry_point)) { + if (!Memory::IsValidVirtualAddress(*owner_process, entry_point)) { LOG_ERROR(Kernel_SVC, "(name=%s): invalid entry %08x", name.c_str(), entry_point); // TODO: Verify error return ResultCode(ErrorDescription::InvalidAddress, ErrorModule::Kernel, @@ -399,10 +400,10 @@ ResultVal> Thread::Create(std::string name, VAddr entry_point, thread->wait_address = 0; thread->name = std::move(name); thread->callback_handle = wakeup_callback_handle_table.Create(thread).Unwrap(); - thread->owner_process = g_current_process; + thread->owner_process = owner_process; // Find the next available TLS index, and mark it as used - auto& tls_slots = Kernel::g_current_process->tls_slots; + auto& tls_slots = owner_process->tls_slots; bool needs_allocation = true; u32 available_page; // Which allocated page has free space u32 available_slot; // Which slot within the page is free @@ -426,13 +427,13 @@ ResultVal> Thread::Create(std::string name, VAddr entry_point, // Allocate some memory from the end of the linear heap for this region. linheap_memory->insert(linheap_memory->end(), Memory::PAGE_SIZE, 0); memory_region->used += Memory::PAGE_SIZE; - Kernel::g_current_process->linear_heap_used += Memory::PAGE_SIZE; + owner_process->linear_heap_used += Memory::PAGE_SIZE; tls_slots.emplace_back(0); // The page is completely available at the start available_page = tls_slots.size() - 1; available_slot = 0; // Use the first slot in the new page - auto& vm_manager = Kernel::g_current_process->vm_manager; + auto& vm_manager = owner_process->vm_manager; vm_manager.RefreshMemoryBlockMappings(linheap_memory.get()); // Map the page to the current process' address space. @@ -486,10 +487,10 @@ void Thread::BoostPriority(s32 priority) { current_priority = priority; } -SharedPtr SetupMainThread(u32 entry_point, s32 priority) { +SharedPtr SetupMainThread(u32 entry_point, s32 priority, SharedPtr owner_process) { // Initialize new "main" thread auto thread_res = Thread::Create("main", entry_point, priority, 0, THREADPROCESSORID_0, - Memory::HEAP_VADDR_END); + Memory::HEAP_VADDR_END, owner_process); SharedPtr thread = std::move(thread_res).Unwrap(); diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index 6a3566f15b..ddc0d15c56 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -56,10 +56,12 @@ public: * @param arg User data to pass to the thread * @param processor_id The ID(s) of the processors on which the thread is desired to be run * @param stack_top The address of the thread's stack top + * @param owner_process The parent process for the thread * @return A shared pointer to the newly created thread */ static ResultVal> Create(std::string name, VAddr entry_point, u32 priority, - u32 arg, s32 processor_id, VAddr stack_top); + u32 arg, s32 processor_id, VAddr stack_top, + SharedPtr owner_process); std::string GetName() const override { return name; @@ -116,9 +118,9 @@ public: void ResumeFromWait(); /** - * Schedules an event to wake up the specified thread after the specified delay - * @param nanoseconds The time this thread will be allowed to sleep for - */ + * Schedules an event to wake up the specified thread after the specified delay + * @param nanoseconds The time this thread will be allowed to sleep for + */ void WakeAfterDelay(s64 nanoseconds); /** @@ -214,9 +216,10 @@ private: * Sets up the primary application thread * @param entry_point The address at which the thread should start execution * @param priority The priority to give the main thread + * @param owner_process The parent process for the main thread * @return A shared pointer to the main thread */ -SharedPtr SetupMainThread(u32 entry_point, s32 priority); +SharedPtr SetupMainThread(u32 entry_point, s32 priority, SharedPtr owner_process); /** * Returns whether there are any threads that are ready to run. @@ -276,4 +279,4 @@ void ThreadingShutdown(); */ const std::vector>& GetThreadList(); -} // namespace +} // namespace Kernel diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index dfc36748c1..05c6897bf8 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -656,8 +656,9 @@ static ResultCode CreateThread(Kernel::Handle* out_handle, u32 priority, u32 ent "Newly created thread must run in the SysCore (Core1), unimplemented."); } - CASCADE_RESULT(SharedPtr thread, Kernel::Thread::Create(name, entry_point, priority, - arg, processor_id, stack_top)); + CASCADE_RESULT(SharedPtr thread, + Kernel::Thread::Create(name, entry_point, priority, arg, processor_id, stack_top, + Kernel::g_current_process)); thread->context.fpscr = FPSCR_DEFAULT_NAN | FPSCR_FLUSH_TO_ZERO | FPSCR_ROUND_TOZERO; // 0x03C00000 From 7f48aa8d2580da6b3b83a389e31804e493aba69f Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 26 Sep 2017 18:17:47 -0500 Subject: [PATCH 169/195] Loaders: Don't automatically set the current process every time we load an application. The loaders will now just create a Kernel::Process, construct it and return it to the caller, which is responsible for setting it as the current process and configuring the global page table. --- src/core/core.cpp | 6 ++++-- src/core/loader/3dsx.cpp | 15 +++++++-------- src/core/loader/3dsx.h | 2 +- src/core/loader/elf.cpp | 15 +++++++-------- src/core/loader/elf.h | 2 +- src/core/loader/loader.h | 13 ++++++++----- src/core/loader/ncch.cpp | 19 +++++++++---------- src/core/loader/ncch.h | 5 +++-- 8 files changed, 40 insertions(+), 37 deletions(-) diff --git a/src/core/core.cpp b/src/core/core.cpp index 59b8768e71..0c7a729871 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -13,6 +13,7 @@ #include "core/core_timing.h" #include "core/gdbstub/gdbstub.h" #include "core/hle/kernel/kernel.h" +#include "core/hle/kernel/process.h" #include "core/hle/kernel/thread.h" #include "core/hle/service/service.h" #include "core/hw/hw.h" @@ -100,7 +101,7 @@ System::ResultStatus System::Load(EmuWindow* emu_window, const std::string& file return init_result; } - const Loader::ResultStatus load_result{app_loader->Load()}; + const Loader::ResultStatus load_result{app_loader->Load(Kernel::g_current_process)}; if (Loader::ResultStatus::Success != load_result) { LOG_CRITICAL(Core, "Failed to load ROM (Error %i)!", load_result); System::Shutdown(); @@ -114,6 +115,7 @@ System::ResultStatus System::Load(EmuWindow* emu_window, const std::string& file return ResultStatus::ErrorLoader; } } + Memory::SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table); status = ResultStatus::Success; return status; } @@ -196,4 +198,4 @@ void System::Shutdown() { LOG_DEBUG(Core, "Shutdown OK"); } -} // namespace +} // namespace Core diff --git a/src/core/loader/3dsx.cpp b/src/core/loader/3dsx.cpp index 5ad5c52876..918038f1e3 100644 --- a/src/core/loader/3dsx.cpp +++ b/src/core/loader/3dsx.cpp @@ -91,8 +91,8 @@ static u32 TranslateAddr(u32 addr, const THREEloadinfo* loadinfo, u32* offsets) return loadinfo->seg_addrs[2] + addr - offsets[1]; } -using Kernel::SharedPtr; using Kernel::CodeSet; +using Kernel::SharedPtr; static THREEDSX_Error Load3DSXFile(FileUtil::IOFile& file, u32 base_addr, SharedPtr* out_codeset) { @@ -255,7 +255,7 @@ FileType AppLoader_THREEDSX::IdentifyType(FileUtil::IOFile& file) { return FileType::Error; } -ResultStatus AppLoader_THREEDSX::Load() { +ResultStatus AppLoader_THREEDSX::Load(Kernel::SharedPtr& process) { if (is_loaded) return ResultStatus::ErrorAlreadyLoaded; @@ -267,16 +267,15 @@ ResultStatus AppLoader_THREEDSX::Load() { return ResultStatus::Error; codeset->name = filename; - Kernel::g_current_process = Kernel::Process::Create(std::move(codeset)); - Kernel::g_current_process->svc_access_mask.set(); - Kernel::g_current_process->address_mappings = default_address_mappings; - Memory::SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table); + process = Kernel::Process::Create(std::move(codeset)); + process->svc_access_mask.set(); + process->address_mappings = default_address_mappings; // Attach the default resource limit (APPLICATION) to the process - Kernel::g_current_process->resource_limit = + process->resource_limit = Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); - Kernel::g_current_process->Run(48, Kernel::DEFAULT_STACK_SIZE); + process->Run(48, Kernel::DEFAULT_STACK_SIZE); Service::FS::RegisterSelfNCCH(*this); diff --git a/src/core/loader/3dsx.h b/src/core/loader/3dsx.h index 3f376778a3..1e59bbb9d1 100644 --- a/src/core/loader/3dsx.h +++ b/src/core/loader/3dsx.h @@ -31,7 +31,7 @@ public: return IdentifyType(file); } - ResultStatus Load() override; + ResultStatus Load(Kernel::SharedPtr& process) override; ResultStatus ReadIcon(std::vector& buffer) override; diff --git a/src/core/loader/elf.cpp b/src/core/loader/elf.cpp index 2de1f4e816..e36e421200 100644 --- a/src/core/loader/elf.cpp +++ b/src/core/loader/elf.cpp @@ -13,8 +13,8 @@ #include "core/loader/elf.h" #include "core/memory.h" -using Kernel::SharedPtr; using Kernel::CodeSet; +using Kernel::SharedPtr; //////////////////////////////////////////////////////////////////////////////////////////////////// // ELF Header Constants @@ -375,7 +375,7 @@ FileType AppLoader_ELF::IdentifyType(FileUtil::IOFile& file) { return FileType::Error; } -ResultStatus AppLoader_ELF::Load() { +ResultStatus AppLoader_ELF::Load(Kernel::SharedPtr& process) { if (is_loaded) return ResultStatus::ErrorAlreadyLoaded; @@ -394,16 +394,15 @@ ResultStatus AppLoader_ELF::Load() { SharedPtr codeset = elf_reader.LoadInto(Memory::PROCESS_IMAGE_VADDR); codeset->name = filename; - Kernel::g_current_process = Kernel::Process::Create(std::move(codeset)); - Kernel::g_current_process->svc_access_mask.set(); - Kernel::g_current_process->address_mappings = default_address_mappings; - Memory::SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table); + process = Kernel::Process::Create(std::move(codeset)); + process->svc_access_mask.set(); + process->address_mappings = default_address_mappings; // Attach the default resource limit (APPLICATION) to the process - Kernel::g_current_process->resource_limit = + process->resource_limit = Kernel::ResourceLimit::GetForCategory(Kernel::ResourceLimitCategory::APPLICATION); - Kernel::g_current_process->Run(48, Kernel::DEFAULT_STACK_SIZE); + process->Run(48, Kernel::DEFAULT_STACK_SIZE); is_loaded = true; return ResultStatus::Success; diff --git a/src/core/loader/elf.h b/src/core/loader/elf.h index 862aa90d87..113da59179 100644 --- a/src/core/loader/elf.h +++ b/src/core/loader/elf.h @@ -30,7 +30,7 @@ public: return IdentifyType(file); } - ResultStatus Load() override; + ResultStatus Load(Kernel::SharedPtr& process) override; private: std::string filename; diff --git a/src/core/loader/loader.h b/src/core/loader/loader.h index 3160fd2fdc..82b2be6a37 100644 --- a/src/core/loader/loader.h +++ b/src/core/loader/loader.h @@ -13,10 +13,12 @@ #include #include "common/common_types.h" #include "common/file_util.h" +#include "core/hle/kernel/kernel.h" namespace Kernel { struct AddressMapping; -} +class Process; +} // namespace Kernel //////////////////////////////////////////////////////////////////////////////////////////////////// // Loader namespace @@ -92,10 +94,11 @@ public: virtual FileType GetFileType() = 0; /** - * Load the application - * @return ResultStatus result of function + * Load the application and return the created Process instance + * @param process The newly created process. + * @return The status result of the operation. */ - virtual ResultStatus Load() = 0; + virtual ResultStatus Load(Kernel::SharedPtr& process) = 0; /** * Loads the system mode that this application needs. @@ -206,4 +209,4 @@ extern const std::initializer_list default_address_mappi */ std::unique_ptr GetLoader(const std::string& filename); -} // namespace +} // namespace Loader diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index 5107135f98..66bc5823d2 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -67,9 +67,9 @@ std::pair, ResultStatus> AppLoader_NCCH::LoadKernelSystemMo ResultStatus::Success); } -ResultStatus AppLoader_NCCH::LoadExec() { - using Kernel::SharedPtr; +ResultStatus AppLoader_NCCH::LoadExec(Kernel::SharedPtr& process) { using Kernel::CodeSet; + using Kernel::SharedPtr; if (!is_loaded) return ResultStatus::ErrorNotLoaded; @@ -107,16 +107,15 @@ ResultStatus AppLoader_NCCH::LoadExec() { codeset->entrypoint = codeset->code.addr; codeset->memory = std::make_shared>(std::move(code)); - Kernel::g_current_process = Kernel::Process::Create(std::move(codeset)); - Memory::SetCurrentPageTable(&Kernel::g_current_process->vm_manager.page_table); + process = Kernel::Process::Create(std::move(codeset)); // Attach a resource limit to the process based on the resource limit category - Kernel::g_current_process->resource_limit = + process->resource_limit = Kernel::ResourceLimit::GetForCategory(static_cast( overlay_ncch->exheader_header.arm11_system_local_caps.resource_limit_category)); // Set the default CPU core for this process - Kernel::g_current_process->ideal_processor = + process->ideal_processor = overlay_ncch->exheader_header.arm11_system_local_caps.ideal_processor; // Copy data while converting endianness @@ -124,11 +123,11 @@ ResultStatus AppLoader_NCCH::LoadExec() { kernel_caps; std::copy_n(overlay_ncch->exheader_header.arm11_kernel_caps.descriptors, kernel_caps.size(), begin(kernel_caps)); - Kernel::g_current_process->ParseKernelCaps(kernel_caps.data(), kernel_caps.size()); + process->ParseKernelCaps(kernel_caps.data(), kernel_caps.size()); s32 priority = overlay_ncch->exheader_header.arm11_system_local_caps.priority; u32 stack_size = overlay_ncch->exheader_header.codeset_info.stack_size; - Kernel::g_current_process->Run(priority, stack_size); + process->Run(priority, stack_size); return ResultStatus::Success; } return ResultStatus::Error; @@ -151,7 +150,7 @@ void AppLoader_NCCH::ParseRegionLockoutInfo() { } } -ResultStatus AppLoader_NCCH::Load() { +ResultStatus AppLoader_NCCH::Load(Kernel::SharedPtr& process) { u64_le ncch_program_id; if (is_loaded) @@ -183,7 +182,7 @@ ResultStatus AppLoader_NCCH::Load() { is_loaded = true; // Set state to loaded - result = LoadExec(); // Load the executable into memory for booting + result = LoadExec(process); // Load the executable into memory for booting if (ResultStatus::Success != result) return result; diff --git a/src/core/loader/ncch.h b/src/core/loader/ncch.h index 9b56465cb2..09230ae33f 100644 --- a/src/core/loader/ncch.h +++ b/src/core/loader/ncch.h @@ -33,7 +33,7 @@ public: return IdentifyType(file); } - ResultStatus Load() override; + ResultStatus Load(Kernel::SharedPtr& process) override; /** * Loads the Exheader and returns the system mode for this application. @@ -62,9 +62,10 @@ public: private: /** * Loads .code section into memory for booting + * @param process The newly created process * @return ResultStatus result of function */ - ResultStatus LoadExec(); + ResultStatus LoadExec(Kernel::SharedPtr& process); /// Reads the region lockout info in the SMDH and send it to CFG service void ParseRegionLockoutInfo(); From a321bce37834c1f3034bd87df14fc71c13e6b84a Mon Sep 17 00:00:00 2001 From: Subv Date: Tue, 29 Aug 2017 12:59:54 -0500 Subject: [PATCH 170/195] Disable unary operator- on Math::Vec2/Vec3/Vec4 for unsigned types. It is unlikely we will ever use this without first doing a Cast to a signed type. Fixes 9 "unary minus operator applied to unsigned type, result still unsigned" warnings on MSVC2017.3 --- src/common/vector_math.h | 12 ++++++++---- src/video_core/swrasterizer/clipper.cpp | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/common/vector_math.h b/src/common/vector_math.h index 6e2a5ad601..2b05f66eef 100644 --- a/src/common/vector_math.h +++ b/src/common/vector_math.h @@ -31,6 +31,7 @@ #pragma once #include +#include namespace Math { @@ -90,7 +91,8 @@ public: y -= other.y; } - Vec2 operator-() const { + template + Vec2::value, U>> operator-() const { return MakeVec(-x, -y); } Vec2 operator*(const Vec2& other) const { @@ -247,7 +249,8 @@ public: z -= other.z; } - Vec3 operator-() const { + template + Vec3::value, U>> operator-() const { return MakeVec(-x, -y, -z); } Vec3 operator*(const Vec3& other) const { @@ -462,7 +465,8 @@ public: w -= other.w; } - Vec4 operator-() const { + template + Vec4::value, U>> operator-() const { return MakeVec(-x, -y, -z, -w); } Vec4 operator*(const Vec4& other) const { @@ -720,4 +724,4 @@ static inline Vec4 MakeVec(const T& x, const Vec3& yzw) { return MakeVec(x, yzw[0], yzw[1], yzw[2]); } -} // namespace +} // namespace Math diff --git a/src/video_core/swrasterizer/clipper.cpp b/src/video_core/swrasterizer/clipper.cpp index a52129eb76..c1ed48398c 100644 --- a/src/video_core/swrasterizer/clipper.cpp +++ b/src/video_core/swrasterizer/clipper.cpp @@ -98,7 +98,7 @@ void ProcessTriangle(const OutputVertex& v0, const OutputVertex& v1, const Outpu auto FlipQuaternionIfOpposite = [](auto& a, const auto& b) { if (Math::Dot(a, b) < float24::Zero()) - a = -a; + a = a * float24::FromFloat32(-1.0f); }; // Flip the quaternions if they are opposite to prevent interpolating them over the wrong From 8432749db7afecc9beea20f993cc036418caaa15 Mon Sep 17 00:00:00 2001 From: Subv Date: Thu, 28 Sep 2017 11:53:32 -0500 Subject: [PATCH 171/195] Kernel/Threads: When putting a thread to wait, specify a function to execute when it is awoken. This change makes for a clearer (less confusing) path of execution in the scheduler, now the code to execute when a thread awakes is closer to the code that puts the thread to sleep (WaitSynch1, WaitSynchN). It also allows us to implement the special wake up behavior of ReplyAndReceive without hacking up WaitObject::WakeupAllWaitingThreads. If savestates are desired in the future, we can change this implementation to one similar to the CoreTiming event system, where we first register the callback functions at startup and assign their identifiers to the Thread callback variable instead of directly assigning a lambda to the wake up callback variable. --- src/core/hle/kernel/thread.cpp | 13 ++++-- src/core/hle/kernel/thread.h | 15 +++++-- src/core/hle/kernel/wait_object.cpp | 11 ++--- src/core/hle/svc.cpp | 69 +++++++++++++++++++++++++++-- 4 files changed, 91 insertions(+), 17 deletions(-) diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 61378211fc..690cb20b39 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -247,12 +247,15 @@ static void ThreadWakeupCallback(u64 thread_handle, int cycles_late) { if (thread->status == THREADSTATUS_WAIT_SYNCH_ANY || thread->status == THREADSTATUS_WAIT_SYNCH_ALL || thread->status == THREADSTATUS_WAIT_ARB) { - thread->wait_set_output = false; + + // Invoke the wakeup callback before clearing the wait objects + if (thread->wakeup_callback) + thread->wakeup_callback(ThreadWakeupReason::Timeout, thread, nullptr); + // Remove the thread from each of its waiting objects' waitlists for (auto& object : thread->wait_objects) object->RemoveWaitingThread(thread.get()); thread->wait_objects.clear(); - thread->SetWaitSynchronizationResult(RESULT_TIMEOUT); } thread->ResumeFromWait(); @@ -278,6 +281,9 @@ void Thread::ResumeFromWait() { break; case THREADSTATUS_READY: + // The thread's wakeup callback must have already been cleared when the thread was first + // awoken. + ASSERT(wakeup_callback == nullptr); // If the thread is waiting on multiple wait objects, it might be awoken more than once // before actually resuming. We can ignore subsequent wakeups if the thread status has // already been set to THREADSTATUS_READY. @@ -293,6 +299,8 @@ void Thread::ResumeFromWait() { return; } + wakeup_callback = nullptr; + ready_queue.push_back(current_priority, this); status = THREADSTATUS_READY; Core::System::GetInstance().PrepareReschedule(); @@ -394,7 +402,6 @@ ResultVal> Thread::Create(std::string name, VAddr entry_point, thread->nominal_priority = thread->current_priority = priority; thread->last_running_ticks = CoreTiming::GetTicks(); thread->processor_id = processor_id; - thread->wait_set_output = false; thread->wait_objects.clear(); thread->wait_address = 0; thread->name = std::move(name); diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index 6a3566f15b..328f1a86aa 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -41,6 +41,11 @@ enum ThreadStatus { THREADSTATUS_DEAD ///< Run to completion, or forcefully terminated }; +enum class ThreadWakeupReason { + Signal, // The thread was woken up by WakeupAllWaitingThreads due to an object signal. + Timeout // The thread was woken up due to a wait timeout. +}; + namespace Kernel { class Mutex; @@ -197,14 +202,18 @@ public: VAddr wait_address; ///< If waiting on an AddressArbiter, this is the arbitration address - /// True if the WaitSynchronizationN output parameter should be set on thread wakeup. - bool wait_set_output; - std::string name; /// Handle used as userdata to reference this object when inserting into the CoreTiming queue. Handle callback_handle; + using WakeupCallback = void(ThreadWakeupReason reason, SharedPtr thread, + SharedPtr object); + // Callback that will be invoked when the thread is resumed from a waiting state. If the thread + // was waiting via WaitSynchronizationN then the object will be the last object that became + // available. In case of a timeout, the object will be nullptr. + std::function wakeup_callback; + private: Thread(); ~Thread() override; diff --git a/src/core/hle/kernel/wait_object.cpp b/src/core/hle/kernel/wait_object.cpp index f245eda6cd..1ced26905a 100644 --- a/src/core/hle/kernel/wait_object.cpp +++ b/src/core/hle/kernel/wait_object.cpp @@ -71,23 +71,20 @@ void WaitObject::WakeupAllWaitingThreads() { while (auto thread = GetHighestPriorityReadyThread()) { if (!thread->IsSleepingOnWaitAll()) { Acquire(thread.get()); - // Set the output index of the WaitSynchronizationN call to the index of this object. - if (thread->wait_set_output) { - thread->SetWaitSynchronizationOutput(thread->GetWaitObjectIndex(this)); - thread->wait_set_output = false; - } } else { for (auto& object : thread->wait_objects) { object->Acquire(thread.get()); } - // Note: This case doesn't update the output index of WaitSynchronizationN. } + // Invoke the wakeup callback before clearing the wait objects + if (thread->wakeup_callback) + thread->wakeup_callback(ThreadWakeupReason::Signal, thread, this); + for (auto& object : thread->wait_objects) object->RemoveWaitingThread(thread.get()); thread->wait_objects.clear(); - thread->SetWaitSynchronizationResult(RESULT_SUCCESS); thread->ResumeFromWait(); } } diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index dfc36748c1..41e62cf622 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -271,6 +271,24 @@ static ResultCode WaitSynchronization1(Kernel::Handle handle, s64 nano_seconds) // Create an event to wake the thread up after the specified nanosecond delay has passed thread->WakeAfterDelay(nano_seconds); + thread->wakeup_callback = [](ThreadWakeupReason reason, + Kernel::SharedPtr thread, + Kernel::SharedPtr object) { + + ASSERT(thread->status == THREADSTATUS_WAIT_SYNCH_ANY); + + if (reason == ThreadWakeupReason::Timeout) { + thread->SetWaitSynchronizationResult(Kernel::RESULT_TIMEOUT); + return; + } + + ASSERT(reason == ThreadWakeupReason::Signal); + thread->SetWaitSynchronizationResult(RESULT_SUCCESS); + + // WaitSynchronization1 doesn't have an output index like WaitSynchronizationN, so we + // don't have to do anything else here. + }; + Core::System::GetInstance().PrepareReschedule(); // Note: The output of this SVC will be set to RESULT_SUCCESS if the thread @@ -344,6 +362,23 @@ static ResultCode WaitSynchronizationN(s32* out, Kernel::Handle* handles, s32 ha // Create an event to wake the thread up after the specified nanosecond delay has passed thread->WakeAfterDelay(nano_seconds); + thread->wakeup_callback = [](ThreadWakeupReason reason, + Kernel::SharedPtr thread, + Kernel::SharedPtr object) { + + ASSERT(thread->status == THREADSTATUS_WAIT_SYNCH_ALL); + + if (reason == ThreadWakeupReason::Timeout) { + thread->SetWaitSynchronizationResult(Kernel::RESULT_TIMEOUT); + return; + } + + ASSERT(reason == ThreadWakeupReason::Signal); + + thread->SetWaitSynchronizationResult(RESULT_SUCCESS); + // The wait_all case does not update the output index. + }; + Core::System::GetInstance().PrepareReschedule(); // This value gets set to -1 by default in this case, it is not modified after this. @@ -389,12 +424,28 @@ static ResultCode WaitSynchronizationN(s32* out, Kernel::Handle* handles, s32 ha // Create an event to wake the thread up after the specified nanosecond delay has passed thread->WakeAfterDelay(nano_seconds); + thread->wakeup_callback = [](ThreadWakeupReason reason, + Kernel::SharedPtr thread, + Kernel::SharedPtr object) { + + ASSERT(thread->status == THREADSTATUS_WAIT_SYNCH_ANY); + + if (reason == ThreadWakeupReason::Timeout) { + thread->SetWaitSynchronizationResult(Kernel::RESULT_TIMEOUT); + return; + } + + ASSERT(reason == ThreadWakeupReason::Signal); + + thread->SetWaitSynchronizationResult(RESULT_SUCCESS); + thread->SetWaitSynchronizationOutput(thread->GetWaitObjectIndex(object.get())); + }; + Core::System::GetInstance().PrepareReschedule(); // Note: The output of this SVC will be set to RESULT_SUCCESS if the thread resumes due to a // signal in one of its wait objects. // Otherwise we retain the default value of timeout, and -1 in the out parameter - thread->wait_set_output = true; *out = -1; return Kernel::RESULT_TIMEOUT; } @@ -483,8 +534,6 @@ static ResultCode ReplyAndReceive(s32* index, Kernel::Handle* handles, s32 handl // No objects were ready to be acquired, prepare to suspend the thread. - // TODO(Subv): Perform IPC translation upon wakeup. - // Put the thread to sleep thread->status = THREADSTATUS_WAIT_SYNCH_ANY; @@ -496,12 +545,24 @@ static ResultCode ReplyAndReceive(s32* index, Kernel::Handle* handles, s32 handl thread->wait_objects = std::move(objects); + thread->wakeup_callback = [](ThreadWakeupReason reason, + Kernel::SharedPtr thread, + Kernel::SharedPtr object) { + + ASSERT(thread->status == THREADSTATUS_WAIT_SYNCH_ANY); + ASSERT(reason == ThreadWakeupReason::Signal); + + thread->SetWaitSynchronizationResult(RESULT_SUCCESS); + thread->SetWaitSynchronizationOutput(thread->GetWaitObjectIndex(object.get())); + + // TODO(Subv): Perform IPC translation upon wakeup. + }; + Core::System::GetInstance().PrepareReschedule(); // Note: The output of this SVC will be set to RESULT_SUCCESS if the thread resumes due to a // signal in one of its wait objects, or to 0xC8A01836 if there was a translation error. // By default the index is set to -1. - thread->wait_set_output = true; *index = -1; return RESULT_SUCCESS; } From a13ab958cbba75bc9abd1ca50f3030a10a75784e Mon Sep 17 00:00:00 2001 From: Huw Pascoe Date: Wed, 27 Sep 2017 00:26:09 +0100 Subject: [PATCH 172/195] Fixed type conversion ambiguity --- src/audio_core/hle/source.cpp | 2 +- .../debugger/graphics/graphics_cmdlists.cpp | 4 +-- .../debugger/graphics/graphics_surface.cpp | 3 +- src/common/string_util.cpp | 2 +- src/common/string_util.h | 2 +- src/common/vector_math.h | 12 ++----- src/core/gdbstub/gdbstub.cpp | 4 +-- src/core/hle/ipc.h | 8 ++--- src/core/hle/ipc_helpers.h | 12 +++---- src/core/hle/kernel/hle_ipc.cpp | 2 +- src/core/hle/kernel/mutex.cpp | 2 +- src/core/hle/kernel/resource_limit.cpp | 2 +- src/core/hle/kernel/resource_limit.h | 2 +- src/core/hle/kernel/shared_memory.cpp | 3 +- src/core/hle/kernel/shared_memory.h | 2 +- src/core/hle/kernel/thread.cpp | 18 +++++----- src/core/hle/kernel/thread.h | 14 ++++---- src/core/hle/kernel/wait_object.cpp | 2 +- src/core/hle/service/apt/apt.cpp | 4 +-- src/core/hle/service/cam/cam.cpp | 2 +- src/core/hle/service/cfg/cfg.cpp | 2 +- src/core/hle/service/fs/archive.cpp | 2 +- src/core/hle/service/hid/hid.cpp | 2 +- src/core/hle/service/ldr_ro/cro_helper.h | 6 ++-- src/core/hle/service/nwm/nwm_uds.cpp | 10 +++--- src/core/hle/service/nwm/uds_beacon.cpp | 4 +-- src/core/hle/service/nwm/uds_data.cpp | 8 ++--- src/core/hle/svc.cpp | 8 ++--- src/core/memory.cpp | 36 +++++++++++-------- src/network/packet.cpp | 2 +- src/video_core/geometry_pipeline.cpp | 2 +- src/video_core/renderer_opengl/gl_state.cpp | 4 +-- 32 files changed, 97 insertions(+), 91 deletions(-) diff --git a/src/audio_core/hle/source.cpp b/src/audio_core/hle/source.cpp index de4e88caee..c122877002 100644 --- a/src/audio_core/hle/source.cpp +++ b/src/audio_core/hle/source.cpp @@ -264,7 +264,7 @@ void Source::GenerateFrame() { break; } } - state.next_sample_number += frame_position; + state.next_sample_number += static_cast(frame_position); state.filters.ProcessFrame(current_frame); } diff --git a/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp b/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp index 7d06ec28a4..ce2b9fa505 100644 --- a/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp +++ b/src/citra_qt/debugger/graphics/graphics_cmdlists.cpp @@ -26,8 +26,8 @@ namespace { QImage LoadTexture(const u8* src, const Pica::Texture::TextureInfo& info) { QImage decoded_image(info.width, info.height, QImage::Format_ARGB32); - for (int y = 0; y < info.height; ++y) { - for (int x = 0; x < info.width; ++x) { + for (u32 y = 0; y < info.height; ++y) { + for (u32 x = 0; x < info.width; ++x) { Math::Vec4 color = Pica::Texture::LookupTexture(src, x, y, info, true); decoded_image.setPixel(x, y, qRgba(color.r(), color.g(), color.b(), color.a())); } diff --git a/src/citra_qt/debugger/graphics/graphics_surface.cpp b/src/citra_qt/debugger/graphics/graphics_surface.cpp index 47d9924e1a..c974545ef2 100644 --- a/src/citra_qt/debugger/graphics/graphics_surface.cpp +++ b/src/citra_qt/debugger/graphics/graphics_surface.cpp @@ -273,7 +273,8 @@ void GraphicsSurfaceWidget::Pick(int x, int y) { surface_picker_x_control->setValue(x); surface_picker_y_control->setValue(y); - if (x < 0 || x >= surface_width || y < 0 || y >= surface_height) { + if (x < 0 || x >= static_cast(surface_width) || y < 0 || + y >= static_cast(surface_height)) { surface_info_label->setText(tr("Pixel out of bounds")); surface_info_label->setAlignment(Qt::AlignLeft | Qt::AlignVCenter); return; diff --git a/src/common/string_util.cpp b/src/common/string_util.cpp index bad311793d..6959915faa 100644 --- a/src/common/string_util.cpp +++ b/src/common/string_util.cpp @@ -117,7 +117,7 @@ std::string StringFromFormat(const char* format, ...) { } // For Debugging. Read out an u8 array. -std::string ArrayToString(const u8* data, u32 size, int line_len, bool spaces) { +std::string ArrayToString(const u8* data, size_t size, int line_len, bool spaces) { std::ostringstream oss; oss << std::setfill('0') << std::hex; diff --git a/src/common/string_util.h b/src/common/string_util.h index 075bf4ecb2..259360aecb 100644 --- a/src/common/string_util.h +++ b/src/common/string_util.h @@ -33,7 +33,7 @@ inline void CharArrayFromFormat(char (&out)[Count], const char* format, ...) { } // Good -std::string ArrayToString(const u8* data, u32 size, int line_len = 20, bool spaces = true); +std::string ArrayToString(const u8* data, size_t size, int line_len = 20, bool spaces = true); std::string StripSpaces(const std::string& s); std::string StripQuotes(const std::string& s); diff --git a/src/common/vector_math.h b/src/common/vector_math.h index 2b05f66eef..3f0057d9e5 100644 --- a/src/common/vector_math.h +++ b/src/common/vector_math.h @@ -104,8 +104,7 @@ public: } template void operator*=(const V& f) { - x *= f; - y *= f; + *this = *this * f; } template Vec2 operator/(const V& f) const { @@ -262,9 +261,7 @@ public: } template void operator*=(const V& f) { - x *= f; - y *= f; - z *= f; + *this = *this * f; } template Vec3 operator/(const V& f) const { @@ -478,10 +475,7 @@ public: } template void operator*=(const V& f) { - x *= f; - y *= f; - z *= f; - w *= f; + *this = *this * f; } template Vec4 operator/(const V& f) const { diff --git a/src/core/gdbstub/gdbstub.cpp b/src/core/gdbstub/gdbstub.cpp index 123fe7cd4b..be2b2e25f3 100644 --- a/src/core/gdbstub/gdbstub.cpp +++ b/src/core/gdbstub/gdbstub.cpp @@ -946,7 +946,7 @@ static void Init(u16 port) { WSAStartup(MAKEWORD(2, 2), &InitData); #endif - int tmpsock = socket(PF_INET, SOCK_STREAM, 0); + int tmpsock = static_cast(socket(PF_INET, SOCK_STREAM, 0)); if (tmpsock == -1) { LOG_ERROR(Debug_GDBStub, "Failed to create gdb socket"); } @@ -973,7 +973,7 @@ static void Init(u16 port) { sockaddr_in saddr_client; sockaddr* client_addr = reinterpret_cast(&saddr_client); socklen_t client_addrlen = sizeof(saddr_client); - gdbserver_socket = accept(tmpsock, client_addr, &client_addrlen); + gdbserver_socket = static_cast(accept(tmpsock, client_addr, &client_addrlen)); if (gdbserver_socket < 0) { // In the case that we couldn't start the server for whatever reason, just start CPU // execution like normal. diff --git a/src/core/hle/ipc.h b/src/core/hle/ipc.h index f7f96125ab..87ed85df68 100644 --- a/src/core/hle/ipc.h +++ b/src/core/hle/ipc.h @@ -122,11 +122,11 @@ union StaticBufferDescInfo { BitField<14, 18, u32> size; }; -inline u32 StaticBufferDesc(u32 size, u8 buffer_id) { +inline u32 StaticBufferDesc(size_t size, u8 buffer_id) { StaticBufferDescInfo info{}; info.descriptor_type.Assign(StaticBuffer); info.buffer_id.Assign(buffer_id); - info.size.Assign(size); + info.size.Assign(static_cast(size)); return info.raw; } @@ -160,11 +160,11 @@ union MappedBufferDescInfo { BitField<4, 28, u32> size; }; -inline u32 MappedBufferDesc(u32 size, MappedBufferPermissions perms) { +inline u32 MappedBufferDesc(size_t size, MappedBufferPermissions perms) { MappedBufferDescInfo info{}; info.flags.Assign(MappedBuffer); info.perms.Assign(perms); - info.size.Assign(size); + info.size.Assign(static_cast(size)); return info.raw; } diff --git a/src/core/hle/ipc_helpers.h b/src/core/hle/ipc_helpers.h index f0d89cffe6..7cb95cbacb 100644 --- a/src/core/hle/ipc_helpers.h +++ b/src/core/hle/ipc_helpers.h @@ -117,9 +117,9 @@ public: void PushCurrentPIDHandle(); - void PushStaticBuffer(VAddr buffer_vaddr, u32 size, u8 buffer_id); + void PushStaticBuffer(VAddr buffer_vaddr, size_t size, u8 buffer_id); - void PushMappedBuffer(VAddr buffer_vaddr, u32 size, MappedBufferPermissions perms); + void PushMappedBuffer(VAddr buffer_vaddr, size_t size, MappedBufferPermissions perms); }; /// Push /// @@ -190,12 +190,12 @@ inline void RequestBuilder::PushCurrentPIDHandle() { Push(u32(0)); } -inline void RequestBuilder::PushStaticBuffer(VAddr buffer_vaddr, u32 size, u8 buffer_id) { +inline void RequestBuilder::PushStaticBuffer(VAddr buffer_vaddr, size_t size, u8 buffer_id) { Push(StaticBufferDesc(size, buffer_id)); Push(buffer_vaddr); } -inline void RequestBuilder::PushMappedBuffer(VAddr buffer_vaddr, u32 size, +inline void RequestBuilder::PushMappedBuffer(VAddr buffer_vaddr, size_t size, MappedBufferPermissions perms) { Push(MappedBufferDesc(size, perms)); Push(buffer_vaddr); @@ -227,8 +227,8 @@ public: bool validateHeader = true) { if (validateHeader) ValidateHeader(); - Header builderHeader{ - MakeHeader(header.command_id, normal_params_size, translate_params_size)}; + Header builderHeader{MakeHeader(static_cast(header.command_id), normal_params_size, + translate_params_size)}; if (context != nullptr) return {*context, builderHeader}; else diff --git a/src/core/hle/kernel/hle_ipc.cpp b/src/core/hle/kernel/hle_ipc.cpp index 5ebe2eca4a..6020e9764e 100644 --- a/src/core/hle/kernel/hle_ipc.cpp +++ b/src/core/hle/kernel/hle_ipc.cpp @@ -37,7 +37,7 @@ SharedPtr HLERequestContext::GetIncomingHandle(u32 id_from_cmdbuf) const u32 HLERequestContext::AddOutgoingHandle(SharedPtr object) { request_handles.push_back(std::move(object)); - return request_handles.size() - 1; + return static_cast(request_handles.size() - 1); } void HLERequestContext::ClearIncomingObjects() { diff --git a/src/core/hle/kernel/mutex.cpp b/src/core/hle/kernel/mutex.cpp index cef9612899..2cbca5e5be 100644 --- a/src/core/hle/kernel/mutex.cpp +++ b/src/core/hle/kernel/mutex.cpp @@ -90,7 +90,7 @@ void Mutex::UpdatePriority() { if (!holding_thread) return; - s32 best_priority = THREADPRIO_LOWEST; + u32 best_priority = THREADPRIO_LOWEST; for (auto& waiter : GetWaitingThreads()) { if (waiter->current_priority < best_priority) best_priority = waiter->current_priority; diff --git a/src/core/hle/kernel/resource_limit.cpp b/src/core/hle/kernel/resource_limit.cpp index a8f10a3eeb..517dc47a8c 100644 --- a/src/core/hle/kernel/resource_limit.cpp +++ b/src/core/hle/kernel/resource_limit.cpp @@ -61,7 +61,7 @@ s32 ResourceLimit::GetCurrentResourceValue(u32 resource) const { } } -s32 ResourceLimit::GetMaxResourceValue(u32 resource) const { +u32 ResourceLimit::GetMaxResourceValue(u32 resource) const { switch (resource) { case PRIORITY: return max_priority; diff --git a/src/core/hle/kernel/resource_limit.h b/src/core/hle/kernel/resource_limit.h index 6cdfbcf8db..42874eb8dd 100644 --- a/src/core/hle/kernel/resource_limit.h +++ b/src/core/hle/kernel/resource_limit.h @@ -67,7 +67,7 @@ public: * @param resource Requested resource type * @returns The max value of the resource type */ - s32 GetMaxResourceValue(u32 resource) const; + u32 GetMaxResourceValue(u32 resource) const; /// Name of resource limit object. std::string name; diff --git a/src/core/hle/kernel/shared_memory.cpp b/src/core/hle/kernel/shared_memory.cpp index a7b66142f6..02d5a7a360 100644 --- a/src/core/hle/kernel/shared_memory.cpp +++ b/src/core/hle/kernel/shared_memory.cpp @@ -42,7 +42,8 @@ SharedPtr SharedMemory::Create(SharedPtr owner_process, u memory_region->used += size; shared_memory->linear_heap_phys_address = - Memory::FCRAM_PADDR + memory_region->base + shared_memory->backing_block_offset; + Memory::FCRAM_PADDR + memory_region->base + + static_cast(shared_memory->backing_block_offset); // Increase the amount of used linear heap memory for the owner process. if (shared_memory->owner_process != nullptr) { diff --git a/src/core/hle/kernel/shared_memory.h b/src/core/hle/kernel/shared_memory.h index 94b335ed12..93a6f21822 100644 --- a/src/core/hle/kernel/shared_memory.h +++ b/src/core/hle/kernel/shared_memory.h @@ -114,7 +114,7 @@ public: /// Backing memory for this shared memory block. std::shared_ptr> backing_block; /// Offset into the backing block for this shared memory. - u32 backing_block_offset; + size_t backing_block_offset; /// Size of the memory block. Page-aligned. u32 size; /// Permission restrictions applied to the process which created the block. diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 1033f8552e..11f7d21277 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -111,7 +111,7 @@ void Thread::Stop() { Thread* ArbitrateHighestPriorityThread(u32 address) { Thread* highest_priority_thread = nullptr; - s32 priority = THREADPRIO_LOWEST; + u32 priority = THREADPRIO_LOWEST; // Iterate through threads, find highest priority thread that is waiting to be arbitrated... for (auto& thread : thread_list) { @@ -311,7 +311,7 @@ static void DebugThreadQueue() { } for (auto& t : thread_list) { - s32 priority = ready_queue.contains(t.get()); + u32 priority = ready_queue.contains(t.get()); if (priority != -1) { LOG_DEBUG(Kernel, "0x%02X %u", priority, t->GetObjectId()); } @@ -422,7 +422,7 @@ ResultVal> Thread::Create(std::string name, VAddr entry_point, return ERR_OUT_OF_MEMORY; } - u32 offset = linheap_memory->size(); + size_t offset = linheap_memory->size(); // Allocate some memory from the end of the linear heap for this region. linheap_memory->insert(linheap_memory->end(), Memory::PAGE_SIZE, 0); @@ -430,7 +430,7 @@ ResultVal> Thread::Create(std::string name, VAddr entry_point, owner_process->linear_heap_used += Memory::PAGE_SIZE; tls_slots.emplace_back(0); // The page is completely available at the start - available_page = tls_slots.size() - 1; + available_page = static_cast(tls_slots.size() - 1); available_slot = 0; // Use the first slot in the new page auto& vm_manager = owner_process->vm_manager; @@ -457,7 +457,7 @@ ResultVal> Thread::Create(std::string name, VAddr entry_point, return MakeResult>(std::move(thread)); } -void Thread::SetPriority(s32 priority) { +void Thread::SetPriority(u32 priority) { ASSERT_MSG(priority <= THREADPRIO_LOWEST && priority >= THREADPRIO_HIGHEST, "Invalid priority value."); // If thread was ready, adjust queues @@ -470,7 +470,7 @@ void Thread::SetPriority(s32 priority) { } void Thread::UpdatePriority() { - s32 best_priority = nominal_priority; + u32 best_priority = nominal_priority; for (auto& mutex : held_mutexes) { if (mutex->priority < best_priority) best_priority = mutex->priority; @@ -478,7 +478,7 @@ void Thread::UpdatePriority() { BoostPriority(best_priority); } -void Thread::BoostPriority(s32 priority) { +void Thread::BoostPriority(u32 priority) { // If thread was ready, adjust queues if (status == THREADSTATUS_READY) ready_queue.move(this, current_priority, priority); @@ -487,7 +487,7 @@ void Thread::BoostPriority(s32 priority) { current_priority = priority; } -SharedPtr SetupMainThread(u32 entry_point, s32 priority, SharedPtr owner_process) { +SharedPtr SetupMainThread(u32 entry_point, u32 priority, SharedPtr owner_process) { // Initialize new "main" thread auto thread_res = Thread::Create("main", entry_point, priority, 0, THREADPROCESSORID_0, Memory::HEAP_VADDR_END, owner_process); @@ -531,7 +531,7 @@ void Thread::SetWaitSynchronizationOutput(s32 output) { s32 Thread::GetWaitObjectIndex(WaitObject* object) const { ASSERT_MSG(!wait_objects.empty(), "Thread is not waiting for anything"); auto match = std::find(wait_objects.rbegin(), wait_objects.rend(), object); - return std::distance(match, wait_objects.rend()) - 1; + return static_cast(std::distance(match, wait_objects.rend()) - 1); } //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index ddc0d15c56..f02e1d43af 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -15,7 +15,7 @@ #include "core/hle/kernel/wait_object.h" #include "core/hle/result.h" -enum ThreadPriority : s32 { +enum ThreadPriority : u32 { THREADPRIO_HIGHEST = 0, ///< Highest thread priority THREADPRIO_USERLAND_MAX = 24, ///< Highest thread priority for userland apps THREADPRIO_DEFAULT = 48, ///< Default thread priority for userland apps @@ -82,7 +82,7 @@ public: * Gets the thread's current priority * @return The current thread's priority */ - s32 GetPriority() const { + u32 GetPriority() const { return current_priority; } @@ -90,7 +90,7 @@ public: * Sets the thread's current priority * @param priority The new priority */ - void SetPriority(s32 priority); + void SetPriority(u32 priority); /** * Boost's a thread's priority to the best priority among the thread's held mutexes. @@ -102,7 +102,7 @@ public: * Temporarily boosts the thread's priority until the next time it is scheduled * @param priority The new priority */ - void BoostPriority(s32 priority); + void BoostPriority(u32 priority); /** * Gets the thread's thread ID @@ -176,8 +176,8 @@ public: u32 entry_point; u32 stack_top; - s32 nominal_priority; ///< Nominal thread priority, as set by the emulated application - s32 current_priority; ///< Current thread priority, can be temporarily changed + u32 nominal_priority; ///< Nominal thread priority, as set by the emulated application + u32 current_priority; ///< Current thread priority, can be temporarily changed u64 last_running_ticks; ///< CPU tick when thread was last running @@ -219,7 +219,7 @@ private: * @param owner_process The parent process for the main thread * @return A shared pointer to the main thread */ -SharedPtr SetupMainThread(u32 entry_point, s32 priority, SharedPtr owner_process); +SharedPtr SetupMainThread(u32 entry_point, u32 priority, SharedPtr owner_process); /** * Returns whether there are any threads that are ready to run. diff --git a/src/core/hle/kernel/wait_object.cpp b/src/core/hle/kernel/wait_object.cpp index f245eda6cd..56fdd977fd 100644 --- a/src/core/hle/kernel/wait_object.cpp +++ b/src/core/hle/kernel/wait_object.cpp @@ -34,7 +34,7 @@ void WaitObject::RemoveWaitingThread(Thread* thread) { SharedPtr WaitObject::GetHighestPriorityReadyThread() { Thread* candidate = nullptr; - s32 candidate_priority = THREADPRIO_LOWEST + 1; + u32 candidate_priority = THREADPRIO_LOWEST + 1; for (const auto& thread : waiting_threads) { // The list of waiting threads must not contain threads that are not waiting to be awakened. diff --git a/src/core/hle/service/apt/apt.cpp b/src/core/hle/service/apt/apt.cpp index 8c0ba73f2a..4c61563456 100644 --- a/src/core/hle/service/apt/apt.cpp +++ b/src/core/hle/service/apt/apt.cpp @@ -561,7 +561,7 @@ void ReceiveParameter(Service::Interface* self) { ? Kernel::g_handle_table.Create(next_parameter->object).Unwrap() : 0); - rb.PushStaticBuffer(buffer, static_cast(next_parameter->buffer.size()), 0); + rb.PushStaticBuffer(buffer, next_parameter->buffer.size(), 0); Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size()); @@ -609,7 +609,7 @@ void GlanceParameter(Service::Interface* self) { ? Kernel::g_handle_table.Create(next_parameter->object).Unwrap() : 0); - rb.PushStaticBuffer(buffer, static_cast(next_parameter->buffer.size()), 0); + rb.PushStaticBuffer(buffer, next_parameter->buffer.size(), 0); Memory::WriteBlock(buffer, next_parameter->buffer.data(), next_parameter->buffer.size()); diff --git a/src/core/hle/service/cam/cam.cpp b/src/core/hle/service/cam/cam.cpp index c9f9e9d95b..8172edae89 100644 --- a/src/core/hle/service/cam/cam.cpp +++ b/src/core/hle/service/cam/cam.cpp @@ -177,7 +177,7 @@ void CompletionEventCallBack(u64 port_id, int) { LOG_ERROR(Service_CAM, "The destination size (%u) doesn't match the source (%zu)!", port.dest_size, buffer_size); } - Memory::WriteBlock(port.dest, buffer.data(), std::min(port.dest_size, buffer_size)); + Memory::WriteBlock(port.dest, buffer.data(), std::min(port.dest_size, buffer_size)); } port.is_receiving = false; diff --git a/src/core/hle/service/cfg/cfg.cpp b/src/core/hle/service/cfg/cfg.cpp index f26a1f65fe..f78c25fb24 100644 --- a/src/core/hle/service/cfg/cfg.cpp +++ b/src/core/hle/service/cfg/cfg.cpp @@ -141,7 +141,7 @@ void GetCountryCodeString(Service::Interface* self) { void GetCountryCodeID(Service::Interface* self) { u32* cmd_buff = Kernel::GetCommandBuffer(); - u16 country_code = cmd_buff[1]; + u16 country_code = static_cast(cmd_buff[1]); u16 country_code_id = 0; // The following algorithm will fail if the first country code isn't 0. diff --git a/src/core/hle/service/fs/archive.cpp b/src/core/hle/service/fs/archive.cpp index 4ccb3cd32a..4ee7df73c7 100644 --- a/src/core/hle/service/fs/archive.cpp +++ b/src/core/hle/service/fs/archive.cpp @@ -217,7 +217,7 @@ void Directory::HandleSyncRequest(Kernel::SharedPtr serve LOG_TRACE(Service_FS, "Read %s: count=%d", GetName().c_str(), count); // Number of entries actually read - u32 read = backend->Read(entries.size(), entries.data()); + u32 read = backend->Read(static_cast(entries.size()), entries.data()); cmd_buff[2] = read; Memory::WriteBlock(address, entries.data(), read * sizeof(FileSys::Entry)); break; diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp index aa5d821f92..379fbd71c1 100644 --- a/src/core/hle/service/hid/hid.cpp +++ b/src/core/hle/service/hid/hid.cpp @@ -251,7 +251,7 @@ static void UpdateGyroscopeCallback(u64 userdata, int cycles_late) { Math::Vec3 gyro; std::tie(std::ignore, gyro) = motion_device->GetStatus(); double stretch = Core::System::GetInstance().perf_stats.GetLastFrameTimeScale(); - gyro *= gyroscope_coef * stretch; + gyro *= gyroscope_coef * static_cast(stretch); gyroscope_entry.x = static_cast(gyro.x); gyroscope_entry.y = static_cast(gyro.y); gyroscope_entry.z = static_cast(gyro.z); diff --git a/src/core/hle/service/ldr_ro/cro_helper.h b/src/core/hle/service/ldr_ro/cro_helper.h index 3bc10dbdc0..57b4fb6df9 100644 --- a/src/core/hle/service/ldr_ro/cro_helper.h +++ b/src/core/hle/service/ldr_ro/cro_helper.h @@ -413,7 +413,8 @@ private: */ template void GetEntry(std::size_t index, T& data) const { - Memory::ReadBlock(GetField(T::TABLE_OFFSET_FIELD) + index * sizeof(T), &data, sizeof(T)); + Memory::ReadBlock(GetField(T::TABLE_OFFSET_FIELD) + static_cast(index * sizeof(T)), + &data, sizeof(T)); } /** @@ -425,7 +426,8 @@ private: */ template void SetEntry(std::size_t index, const T& data) { - Memory::WriteBlock(GetField(T::TABLE_OFFSET_FIELD) + index * sizeof(T), &data, sizeof(T)); + Memory::WriteBlock(GetField(T::TABLE_OFFSET_FIELD) + static_cast(index * sizeof(T)), + &data, sizeof(T)); } /** diff --git a/src/core/hle/service/nwm/nwm_uds.cpp b/src/core/hle/service/nwm/nwm_uds.cpp index 4e2af9ae67..8ef0cda091 100644 --- a/src/core/hle/service/nwm/nwm_uds.cpp +++ b/src/core/hle/service/nwm/nwm_uds.cpp @@ -316,7 +316,7 @@ static void RecvBeaconBroadcastData(Interface* self) { auto beacons = GetReceivedBeacons(mac_address); BeaconDataReplyHeader data_reply_header{}; - data_reply_header.total_entries = beacons.size(); + data_reply_header.total_entries = static_cast(beacons.size()); data_reply_header.max_output_size = out_buffer_size; Memory::WriteBlock(current_buffer_pos, &data_reply_header, sizeof(BeaconDataReplyHeader)); @@ -326,8 +326,8 @@ static void RecvBeaconBroadcastData(Interface* self) { for (const auto& beacon : beacons) { BeaconEntryHeader entry{}; // TODO(Subv): Figure out what this size is used for. - entry.unk_size = sizeof(BeaconEntryHeader) + beacon.data.size(); - entry.total_size = sizeof(BeaconEntryHeader) + beacon.data.size(); + entry.unk_size = static_cast(sizeof(BeaconEntryHeader) + beacon.data.size()); + entry.total_size = static_cast(sizeof(BeaconEntryHeader) + beacon.data.size()); entry.wifi_channel = beacon.channel; entry.header_size = sizeof(BeaconEntryHeader); entry.mac_address = beacon.transmitter_address; @@ -338,9 +338,9 @@ static void RecvBeaconBroadcastData(Interface* self) { current_buffer_pos += sizeof(BeaconEntryHeader); Memory::WriteBlock(current_buffer_pos, beacon.data.data(), beacon.data.size()); - current_buffer_pos += beacon.data.size(); + current_buffer_pos += static_cast(beacon.data.size()); - total_size += sizeof(BeaconEntryHeader) + beacon.data.size(); + total_size += static_cast(sizeof(BeaconEntryHeader) + beacon.data.size()); } // Update the total size in the structure and write it to the buffer again. diff --git a/src/core/hle/service/nwm/uds_beacon.cpp b/src/core/hle/service/nwm/uds_beacon.cpp index 552eaf65ec..73a80d940f 100644 --- a/src/core/hle/service/nwm/uds_beacon.cpp +++ b/src/core/hle/service/nwm/uds_beacon.cpp @@ -243,7 +243,7 @@ std::vector GenerateNintendoFirstEncryptedDataTag(const NetworkInfo& network EncryptedDataTag tag{}; tag.header.tag_id = static_cast(TagId::VendorSpecific); - tag.header.length = sizeof(tag) - sizeof(TagHeader) + payload_size; + tag.header.length = static_cast(sizeof(tag) - sizeof(TagHeader) + payload_size); tag.oui_type = static_cast(NintendoTagId::EncryptedData0); tag.oui = NintendoOUI; @@ -279,7 +279,7 @@ std::vector GenerateNintendoSecondEncryptedDataTag(const NetworkInfo& networ EncryptedDataTag tag{}; tag.header.tag_id = static_cast(TagId::VendorSpecific); - tag.header.length = tag_length; + tag.header.length = static_cast(tag_length); tag.oui_type = static_cast(NintendoTagId::EncryptedData1); tag.oui = NintendoOUI; diff --git a/src/core/hle/service/nwm/uds_data.cpp b/src/core/hle/service/nwm/uds_data.cpp index 0fd9b8b8c6..3ef2a84b63 100644 --- a/src/core/hle/service/nwm/uds_data.cpp +++ b/src/core/hle/service/nwm/uds_data.cpp @@ -197,7 +197,7 @@ static std::vector DecryptDataFrame(const std::vector& encrypted_payload df.ChannelMessageEnd(CryptoPP::DEFAULT_CHANNEL); df.SetRetrievalChannel(CryptoPP::DEFAULT_CHANNEL); - int size = df.MaxRetrievable(); + size_t size = df.MaxRetrievable(); std::vector pdata(size); df.Get(pdata.data(), size); @@ -251,7 +251,7 @@ static std::vector EncryptDataFrame(const std::vector& payload, df.SetRetrievalChannel(CryptoPP::DEFAULT_CHANNEL); - int size = df.MaxRetrievable(); + size_t size = df.MaxRetrievable(); std::vector cipher(size); df.Get(cipher.data(), size); @@ -266,8 +266,8 @@ static std::vector EncryptDataFrame(const std::vector& payload, std::vector GenerateDataPayload(const std::vector& data, u8 channel, u16 dest_node, u16 src_node, u16 sequence_number) { std::vector buffer = GenerateLLCHeader(EtherType::SecureData); - std::vector securedata_header = - GenerateSecureDataHeader(data.size(), channel, dest_node, src_node, sequence_number); + std::vector securedata_header = GenerateSecureDataHeader( + static_cast(data.size()), channel, dest_node, src_node, sequence_number); buffer.insert(buffer.end(), securedata_header.begin(), securedata_header.end()); buffer.insert(buffer.end(), data.begin(), data.end()); diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index 05c6897bf8..41c82c9226 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -361,7 +361,7 @@ static ResultCode WaitSynchronizationN(s32* out, Kernel::Handle* handles, s32 ha // We found a ready object, acquire it and set the result value Kernel::WaitObject* object = itr->get(); object->Acquire(thread); - *out = std::distance(objects.begin(), itr); + *out = static_cast(std::distance(objects.begin(), itr)); return RESULT_SUCCESS; } @@ -469,7 +469,7 @@ static ResultCode ReplyAndReceive(s32* index, Kernel::Handle* handles, s32 handl // We found a ready object, acquire it and set the result value Kernel::WaitObject* object = itr->get(); object->Acquire(thread); - *index = std::distance(objects.begin(), itr); + *index = static_cast(std::distance(objects.begin(), itr)); if (object->GetHandleType() == Kernel::HandleType::ServerSession) { auto server_session = static_cast(object); @@ -683,7 +683,7 @@ static void ExitThread() { } /// Gets the priority for the specified thread -static ResultCode GetThreadPriority(s32* priority, Kernel::Handle handle) { +static ResultCode GetThreadPriority(u32* priority, Kernel::Handle handle) { const SharedPtr thread = Kernel::g_handle_table.Get(handle); if (thread == nullptr) return ERR_INVALID_HANDLE; @@ -693,7 +693,7 @@ static ResultCode GetThreadPriority(s32* priority, Kernel::Handle handle) { } /// Sets the priority for the specified thread -static ResultCode SetThreadPriority(Kernel::Handle handle, s32 priority) { +static ResultCode SetThreadPriority(Kernel::Handle handle, u32 priority) { if (priority > THREADPRIO_LOWEST) { return Kernel::ERR_OUT_OF_RANGE; } diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 5ea0694a97..847e697106 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -477,7 +477,7 @@ void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) { while (remaining_size > 0) { const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); - const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset; + const VAddr current_vaddr = static_cast((page_index << PAGE_BITS) + page_offset); switch (current_page_table->attributes[page_index]) { case PageType::Unmapped: { @@ -500,13 +500,15 @@ void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) { break; } case PageType::RasterizerCachedMemory: { - RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush); + RasterizerFlushVirtualRegion(current_vaddr, static_cast(copy_amount), + FlushMode::Flush); std::memcpy(dest_buffer, GetPointerFromVMA(current_vaddr), copy_amount); break; } case PageType::RasterizerCachedSpecial: { DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); - RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush); + RasterizerFlushVirtualRegion(current_vaddr, static_cast(copy_amount), + FlushMode::Flush); GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, dest_buffer, copy_amount); break; } @@ -544,7 +546,7 @@ void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size while (remaining_size > 0) { const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); - const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset; + const VAddr current_vaddr = static_cast((page_index << PAGE_BITS) + page_offset); switch (current_page_table->attributes[page_index]) { case PageType::Unmapped: { @@ -567,13 +569,15 @@ void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size break; } case PageType::RasterizerCachedMemory: { - RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate); + RasterizerFlushVirtualRegion(current_vaddr, static_cast(copy_amount), + FlushMode::FlushAndInvalidate); std::memcpy(GetPointerFromVMA(current_vaddr), src_buffer, copy_amount); break; } case PageType::RasterizerCachedSpecial: { DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); - RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate); + RasterizerFlushVirtualRegion(current_vaddr, static_cast(copy_amount), + FlushMode::FlushAndInvalidate); GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, src_buffer, copy_amount); break; } @@ -597,7 +601,7 @@ void ZeroBlock(const VAddr dest_addr, const size_t size) { while (remaining_size > 0) { const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); - const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset; + const VAddr current_vaddr = static_cast((page_index << PAGE_BITS) + page_offset); switch (current_page_table->attributes[page_index]) { case PageType::Unmapped: { @@ -619,13 +623,15 @@ void ZeroBlock(const VAddr dest_addr, const size_t size) { break; } case PageType::RasterizerCachedMemory: { - RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate); + RasterizerFlushVirtualRegion(current_vaddr, static_cast(copy_amount), + FlushMode::FlushAndInvalidate); std::memset(GetPointerFromVMA(current_vaddr), 0, copy_amount); break; } case PageType::RasterizerCachedSpecial: { DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); - RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::FlushAndInvalidate); + RasterizerFlushVirtualRegion(current_vaddr, static_cast(copy_amount), + FlushMode::FlushAndInvalidate); GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, zeros.data(), copy_amount); break; } @@ -646,7 +652,7 @@ void CopyBlock(VAddr dest_addr, VAddr src_addr, const size_t size) { while (remaining_size > 0) { const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); - const VAddr current_vaddr = (page_index << PAGE_BITS) + page_offset; + const VAddr current_vaddr = static_cast((page_index << PAGE_BITS) + page_offset); switch (current_page_table->attributes[page_index]) { case PageType::Unmapped: { @@ -670,13 +676,15 @@ void CopyBlock(VAddr dest_addr, VAddr src_addr, const size_t size) { break; } case PageType::RasterizerCachedMemory: { - RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush); + RasterizerFlushVirtualRegion(current_vaddr, static_cast(copy_amount), + FlushMode::Flush); WriteBlock(dest_addr, GetPointerFromVMA(current_vaddr), copy_amount); break; } case PageType::RasterizerCachedSpecial: { DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); - RasterizerFlushVirtualRegion(current_vaddr, copy_amount, FlushMode::Flush); + RasterizerFlushVirtualRegion(current_vaddr, static_cast(copy_amount), + FlushMode::Flush); std::vector buffer(copy_amount); GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, buffer.data(), buffer.size()); @@ -689,8 +697,8 @@ void CopyBlock(VAddr dest_addr, VAddr src_addr, const size_t size) { page_index++; page_offset = 0; - dest_addr += copy_amount; - src_addr += copy_amount; + dest_addr += static_cast(copy_amount); + src_addr += static_cast(copy_amount); remaining_size -= copy_amount; } } diff --git a/src/network/packet.cpp b/src/network/packet.cpp index cc60f2fbca..7e1a812f34 100644 --- a/src/network/packet.cpp +++ b/src/network/packet.cpp @@ -233,7 +233,7 @@ Packet& Packet::operator<<(double in_data) { Packet& Packet::operator<<(const char* in_data) { // First insert string length - u32 length = std::strlen(in_data); + u32 length = static_cast(std::strlen(in_data)); *this << length; // Then insert characters diff --git a/src/video_core/geometry_pipeline.cpp b/src/video_core/geometry_pipeline.cpp index b146e2ecb1..98ff2ccd38 100644 --- a/src/video_core/geometry_pipeline.cpp +++ b/src/video_core/geometry_pipeline.cpp @@ -105,7 +105,7 @@ public: DEBUG_ASSERT(need_index); // The number of vertex input is put to the uniform register - float24 vertex_num = float24::FromFloat32(val); + float24 vertex_num = float24::FromFloat32(static_cast(val)); setup.uniforms.f[0] = Math::MakeVec(vertex_num, vertex_num, vertex_num, vertex_num); // The second uniform register and so on are used for receiving input vertices diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index 06a905766f..5770ae08f2 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp @@ -267,9 +267,9 @@ void OpenGLState::Apply() const { for (size_t i = 0; i < clip_distance.size(); ++i) { if (clip_distance[i] != cur_state.clip_distance[i]) { if (clip_distance[i]) { - glEnable(GL_CLIP_DISTANCE0 + i); + glEnable(GL_CLIP_DISTANCE0 + static_cast(i)); } else { - glDisable(GL_CLIP_DISTANCE0 + i); + glDisable(GL_CLIP_DISTANCE0 + static_cast(i)); } } } From 1f99d53e2c2c7e3f605ee6f57934b3316848c657 Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 30 Sep 2017 11:07:57 -0500 Subject: [PATCH 173/195] Add the .vs folder and the CMakeSettings.json file from Visual Studio to gitignore. --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index ec74b0fa49..7999a40e19 100644 --- a/.gitignore +++ b/.gitignore @@ -9,12 +9,16 @@ src/common/scm_rev.cpp # Project/editor files *.swp .idea/ +.vs/ .vscode/ # *nix related # Common convention for backup or temporary files *~ +# Visual Studio CMake settings +CMakeSettings.json + # OSX global filetypes # Created by Finder or Spotlight in directories for various OS functionality (indexing, etc) .DS_Store From afb1012bcd7e7aea2428aadb195b04ef72fcf861 Mon Sep 17 00:00:00 2001 From: B3n30 Date: Sat, 30 Sep 2017 18:18:45 +0200 Subject: [PATCH 174/195] Services/UDS: Handle the rest of the connection sequence. (#2963) Services/UDS: Handle the rest of the connection sequence. --- src/core/hle/service/nwm/nwm_uds.cpp | 121 +++++++++++++++++++++++--- src/core/hle/service/nwm/uds_data.cpp | 80 ++++++++++++++++- src/core/hle/service/nwm/uds_data.h | 70 +++++++++++++-- 3 files changed, 251 insertions(+), 20 deletions(-) diff --git a/src/core/hle/service/nwm/nwm_uds.cpp b/src/core/hle/service/nwm/nwm_uds.cpp index 8ef0cda091..0aa63cc1e1 100644 --- a/src/core/hle/service/nwm/nwm_uds.cpp +++ b/src/core/hle/service/nwm/nwm_uds.cpp @@ -15,6 +15,7 @@ #include "core/hle/ipc_helpers.h" #include "core/hle/kernel/event.h" #include "core/hle/kernel/shared_memory.h" +#include "core/hle/lock.h" #include "core/hle/result.h" #include "core/hle/service/nwm/nwm_uds.h" #include "core/hle/service/nwm/uds_beacon.h" @@ -100,6 +101,20 @@ void SendPacket(Network::WifiPacket& packet) { // TODO(Subv): Implement. } +/* + * Returns an available index in the nodes array for the + * currently-hosted UDS network. + */ +static u16 GetNextAvailableNodeId() { + for (u16 index = 0; index < connection_status.max_nodes; ++index) { + if ((connection_status.node_bitmask & (1 << index)) == 0) + return index; + } + + // Any connection attempts to an already full network should have been refused. + ASSERT_MSG(false, "No available connection slots in the network"); +} + // Inserts the received beacon frame in the beacon queue and removes any older beacons if the size // limit is exceeded. void HandleBeaconFrame(const Network::WifiPacket& packet) { @@ -143,18 +158,88 @@ void HandleAssociationResponseFrame(const Network::WifiPacket& packet) { SendPacket(eapol_start); } -/* - * Returns an available index in the nodes array for the - * currently-hosted UDS network. - */ -static u16 GetNextAvailableNodeId() { - for (u16 index = 0; index < connection_status.max_nodes; ++index) { - if ((connection_status.node_bitmask & (1 << index)) == 0) - return index; - } +static void HandleEAPoLPacket(const Network::WifiPacket& packet) { + std::lock_guard lock(connection_status_mutex); - // Any connection attempts to an already full network should have been refused. - ASSERT_MSG(false, "No available connection slots in the network"); + if (GetEAPoLFrameType(packet.data) == EAPoLStartMagic) { + if (connection_status.status != static_cast(NetworkStatus::ConnectedAsHost)) { + LOG_DEBUG(Service_NWM, "Connection sequence aborted, because connection status is %u", + connection_status.status); + return; + } + + auto node = DeserializeNodeInfoFromFrame(packet.data); + + if (connection_status.max_nodes == connection_status.total_nodes) { + // Reject connection attempt + LOG_ERROR(Service_NWM, "Reached maximum nodes, but reject packet wasn't sent."); + // TODO(B3N30): Figure out what packet is sent here + return; + } + + // Get an unused network node id + u16 node_id = GetNextAvailableNodeId(); + node.network_node_id = node_id + 1; + + connection_status.node_bitmask |= 1 << node_id; + connection_status.changed_nodes |= 1 << node_id; + connection_status.nodes[node_id] = node.network_node_id; + connection_status.total_nodes++; + + u8 current_nodes = network_info.total_nodes; + node_info[current_nodes] = node; + + network_info.total_nodes++; + + // Send the EAPoL-Logoff packet. + using Network::WifiPacket; + WifiPacket eapol_logoff; + eapol_logoff.channel = network_channel; + eapol_logoff.data = + GenerateEAPoLLogoffFrame(packet.transmitter_address, node.network_node_id, node_info, + network_info.max_nodes, network_info.total_nodes); + // TODO(Subv): Encrypt the packet. + eapol_logoff.destination_address = packet.transmitter_address; + eapol_logoff.type = WifiPacket::PacketType::Data; + + SendPacket(eapol_logoff); + // TODO(B3N30): Broadcast updated node list + // The 3ds does this presumably to support spectators. + std::lock_guard lock(HLE::g_hle_lock); + connection_status_event->Signal(); + } else { + if (connection_status.status != static_cast(NetworkStatus::NotConnected)) { + LOG_DEBUG(Service_NWM, "Connection sequence aborted, because connection status is %u", + connection_status.status); + return; + } + auto logoff = ParseEAPoLLogoffFrame(packet.data); + + network_info.total_nodes = logoff.connected_nodes; + network_info.max_nodes = logoff.max_nodes; + + connection_status.network_node_id = logoff.assigned_node_id; + connection_status.total_nodes = logoff.connected_nodes; + connection_status.max_nodes = logoff.max_nodes; + + node_info.clear(); + node_info.reserve(network_info.max_nodes); + for (size_t index = 0; index < logoff.connected_nodes; ++index) { + connection_status.node_bitmask |= 1 << index; + connection_status.changed_nodes |= 1 << index; + connection_status.nodes[index] = logoff.nodes[index].network_node_id; + + node_info.emplace_back(DeserializeNodeInfo(logoff.nodes[index])); + } + + // We're now connected, signal the application + connection_status.status = static_cast(NetworkStatus::ConnectedAsClient); + // Some games require ConnectToNetwork to block, for now it doesn't + // If blocking is implemented this lock needs to be changed, + // otherwise it might cause deadlocks + std::lock_guard lock(HLE::g_hle_lock); + connection_status_event->Signal(); + } } /* @@ -238,6 +323,17 @@ void HandleAuthenticationFrame(const Network::WifiPacket& packet) { } } +static void HandleDataFrame(const Network::WifiPacket& packet) { + switch (GetFrameEtherType(packet.data)) { + case EtherType::EAPoL: + HandleEAPoLPacket(packet); + break; + case EtherType::SecureData: + // TODO(B3N30): Handle SecureData packets + break; + } +} + /// Callback to parse and handle a received wifi packet. void OnWifiPacketReceived(const Network::WifiPacket& packet) { switch (packet.type) { @@ -250,6 +346,9 @@ void OnWifiPacketReceived(const Network::WifiPacket& packet) { case Network::WifiPacket::PacketType::AssociationResponse: HandleAssociationResponseFrame(packet); break; + case Network::WifiPacket::PacketType::Data: + HandleDataFrame(packet); + break; } } diff --git a/src/core/hle/service/nwm/uds_data.cpp b/src/core/hle/service/nwm/uds_data.cpp index 3ef2a84b63..4b389710fa 100644 --- a/src/core/hle/service/nwm/uds_data.cpp +++ b/src/core/hle/service/nwm/uds_data.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include #include #include #include @@ -277,10 +278,10 @@ std::vector GenerateDataPayload(const std::vector& data, u8 channel, u16 std::vector GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node_info) { EAPoLStartPacket eapol_start{}; eapol_start.association_id = association_id; - eapol_start.friend_code_seed = node_info.friend_code_seed; + eapol_start.node.friend_code_seed = node_info.friend_code_seed; - for (int i = 0; i < node_info.username.size(); ++i) - eapol_start.username[i] = node_info.username[i]; + std::copy(node_info.username.begin(), node_info.username.end(), + eapol_start.node.username.begin()); // Note: The network_node_id and unknown bytes seem to be uninitialized in the NWM module. // TODO(B3N30): The last 8 bytes seem to have a fixed value of 07 88 15 00 04 e9 13 00 in @@ -295,5 +296,78 @@ std::vector GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node return buffer; } +EtherType GetFrameEtherType(const std::vector& frame) { + LLCHeader header; + std::memcpy(&header, frame.data(), sizeof(header)); + + u16 ethertype = header.protocol; + return static_cast(ethertype); +} + +u16 GetEAPoLFrameType(const std::vector& frame) { + // Ignore the LLC header + u16_be eapol_type; + std::memcpy(&eapol_type, frame.data() + sizeof(LLCHeader), sizeof(eapol_type)); + return eapol_type; +} + +NodeInfo DeserializeNodeInfoFromFrame(const std::vector& frame) { + EAPoLStartPacket eapol_start; + + // Skip the LLC header + std::memcpy(&eapol_start, frame.data() + sizeof(LLCHeader), sizeof(eapol_start)); + + NodeInfo node{}; + node.friend_code_seed = eapol_start.node.friend_code_seed; + + std::copy(eapol_start.node.username.begin(), eapol_start.node.username.end(), + node.username.begin()); + + return node; +} + +NodeInfo DeserializeNodeInfo(const EAPoLNodeInfo& node) { + NodeInfo node_info{}; + node_info.friend_code_seed = node.friend_code_seed; + node_info.network_node_id = node.network_node_id; + + std::copy(node.username.begin(), node.username.end(), node_info.username.begin()); + + return node_info; +} + +std::vector GenerateEAPoLLogoffFrame(const MacAddress& mac_address, u16 network_node_id, + const NodeList& nodes, u8 max_nodes, u8 total_nodes) { + EAPoLLogoffPacket eapol_logoff{}; + eapol_logoff.assigned_node_id = network_node_id; + eapol_logoff.connected_nodes = total_nodes; + eapol_logoff.max_nodes = max_nodes; + + for (size_t index = 0; index < total_nodes; ++index) { + const auto& node_info = nodes[index]; + auto& node = eapol_logoff.nodes[index]; + + node.friend_code_seed = node_info.friend_code_seed; + node.network_node_id = node_info.network_node_id; + + std::copy(node_info.username.begin(), node_info.username.end(), node.username.begin()); + } + + std::vector eapol_buffer(sizeof(EAPoLLogoffPacket)); + std::memcpy(eapol_buffer.data(), &eapol_logoff, sizeof(eapol_logoff)); + + std::vector buffer = GenerateLLCHeader(EtherType::EAPoL); + buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end()); + return buffer; +} + +EAPoLLogoffPacket ParseEAPoLLogoffFrame(const std::vector& frame) { + EAPoLLogoffPacket eapol_logoff; + + // Skip the LLC header + std::memcpy(&eapol_logoff, frame.data() + sizeof(LLCHeader), sizeof(eapol_logoff)); + return eapol_logoff; +} + } // namespace NWM } // namespace Service diff --git a/src/core/hle/service/nwm/uds_data.h b/src/core/hle/service/nwm/uds_data.h index 76e8f546b5..76bccb1bfa 100644 --- a/src/core/hle/service/nwm/uds_data.h +++ b/src/core/hle/service/nwm/uds_data.h @@ -8,6 +8,7 @@ #include #include "common/common_types.h" #include "common/swap.h" +#include "core/hle/service/nwm/uds_beacon.h" #include "core/hle/service/service.h" namespace Service { @@ -67,6 +68,16 @@ struct DataFrameCryptoCTR { static_assert(sizeof(DataFrameCryptoCTR) == 16, "DataFrameCryptoCTR has the wrong size"); +struct EAPoLNodeInfo { + u64_be friend_code_seed; + std::array username; + INSERT_PADDING_BYTES(4); + u16_be network_node_id; + INSERT_PADDING_BYTES(6); +}; + +static_assert(sizeof(EAPoLNodeInfo) == 0x28, "EAPoLNodeInfo has the wrong size"); + constexpr u16 EAPoLStartMagic = 0x201; /* @@ -78,16 +89,28 @@ struct EAPoLStartPacket { // This value is hardcoded to 1 in the NWM module. u16_be unknown = 1; INSERT_PADDING_BYTES(2); - - u64_be friend_code_seed; - std::array username; - INSERT_PADDING_BYTES(4); - u16_be network_node_id; - INSERT_PADDING_BYTES(6); + EAPoLNodeInfo node; }; static_assert(sizeof(EAPoLStartPacket) == 0x30, "EAPoLStartPacket has the wrong size"); +constexpr u16 EAPoLLogoffMagic = 0x202; + +struct EAPoLLogoffPacket { + u16_be magic = EAPoLLogoffMagic; + INSERT_PADDING_BYTES(2); + u16_be assigned_node_id; + MacAddress client_mac_address; + INSERT_PADDING_BYTES(6); + u8 connected_nodes; + u8 max_nodes; + INSERT_PADDING_BYTES(4); + + std::array nodes; +}; + +static_assert(sizeof(EAPoLLogoffPacket) == 0x298, "EAPoLLogoffPacket has the wrong size"); + /** * Generates an unencrypted 802.11 data payload. * @returns The generated frame payload. @@ -102,5 +125,40 @@ std::vector GenerateDataPayload(const std::vector& data, u8 channel, u16 */ std::vector GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node_info); +/* + * Returns the EtherType of the specified 802.11 frame. + */ +EtherType GetFrameEtherType(const std::vector& frame); + +/* + * Returns the EAPoL type (Start / Logoff) of the specified 802.11 frame. + * Note: The frame *must* be an EAPoL frame. + */ +u16 GetEAPoLFrameType(const std::vector& frame); + +/* + * Returns a deserialized NodeInfo structure from the information inside an EAPoL-Start packet + * encapsulated in an 802.11 data frame. + */ +NodeInfo DeserializeNodeInfoFromFrame(const std::vector& frame); + +/* + * Returns a NodeInfo constructed from the data in the specified EAPoLNodeInfo. + */ +NodeInfo DeserializeNodeInfo(const EAPoLNodeInfo& node); + +/* + * Generates an unencrypted 802.11 data frame body with the EAPoL-Logoff format for UDS + * communication. + * @returns The generated frame body. + */ +std::vector GenerateEAPoLLogoffFrame(const MacAddress& mac_address, u16 network_node_id, + const NodeList& nodes, u8 max_nodes, u8 total_nodes); + +/* + * Returns a EAPoLLogoffPacket representing the specified 802.11-encapsulated data frame. + */ +EAPoLLogoffPacket ParseEAPoLLogoffFrame(const std::vector& frame); + } // namespace NWM } // namespace Service From 529f4a01318a450f999ffa7e01c5c26f801d22e0 Mon Sep 17 00:00:00 2001 From: Huw Pascoe Date: Sat, 30 Sep 2017 17:25:49 +0100 Subject: [PATCH 175/195] Moved down_count to CoreTiming --- src/core/arm/arm_interface.h | 9 ----- src/core/arm/dynarmic/arm_dynarmic.cpp | 9 +---- src/core/arm/dynarmic/arm_dynarmic.h | 2 -- src/core/arm/dyncom/arm_dyncom.cpp | 8 +---- src/core/arm/dyncom/arm_dyncom.h | 2 -- src/core/core_timing.cpp | 36 ++++++++++++------- src/core/core_timing.h | 6 ++++ src/core/hle/svc.cpp | 2 +- .../core/arm/dyncom/arm_dyncom_vfp_tests.cpp | 2 +- 9 files changed, 33 insertions(+), 43 deletions(-) diff --git a/src/core/arm/arm_interface.h b/src/core/arm/arm_interface.h index 2aa017a54a..ba528403c4 100644 --- a/src/core/arm/arm_interface.h +++ b/src/core/arm/arm_interface.h @@ -124,12 +124,6 @@ public: */ virtual void SetCP15Register(CP15Register reg, u32 value) = 0; - /** - * Advance the CPU core by the specified number of ticks (e.g. to simulate CPU execution time) - * @param ticks Number of ticks to advance the CPU core - */ - virtual void AddTicks(u64 ticks) = 0; - /** * Saves the current CPU context * @param ctx Thread context to save @@ -150,9 +144,6 @@ public: return num_instructions; } - s64 down_count = 0; ///< A decreasing counter of remaining cycles before the next event, - /// decreased by the cpu run loop - protected: /** * Executes the given number of instructions diff --git a/src/core/arm/dynarmic/arm_dynarmic.cpp b/src/core/arm/dynarmic/arm_dynarmic.cpp index 42ae93ae8c..2cb56d12fc 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.cpp +++ b/src/core/arm/dynarmic/arm_dynarmic.cpp @@ -124,13 +124,6 @@ void ARM_Dynarmic::SetCP15Register(CP15Register reg, u32 value) { interpreter_state->CP15[reg] = value; } -void ARM_Dynarmic::AddTicks(u64 ticks) { - down_count -= ticks; - if (down_count < 0) { - CoreTiming::Advance(); - } -} - MICROPROFILE_DEFINE(ARM_Jit, "ARM JIT", "ARM JIT", MP_RGB(255, 64, 64)); void ARM_Dynarmic::ExecuteInstructions(int num_instructions) { @@ -139,7 +132,7 @@ void ARM_Dynarmic::ExecuteInstructions(int num_instructions) { std::size_t ticks_executed = jit->Run(static_cast(num_instructions)); - AddTicks(ticks_executed); + CoreTiming::AddTicks(ticks_executed); } void ARM_Dynarmic::SaveContext(ARM_Interface::ThreadContext& ctx) { diff --git a/src/core/arm/dynarmic/arm_dynarmic.h b/src/core/arm/dynarmic/arm_dynarmic.h index 96148a1a53..0b00158a52 100644 --- a/src/core/arm/dynarmic/arm_dynarmic.h +++ b/src/core/arm/dynarmic/arm_dynarmic.h @@ -32,8 +32,6 @@ public: u32 GetCP15Register(CP15Register reg) override; void SetCP15Register(CP15Register reg, u32 value) override; - void AddTicks(u64 ticks) override; - void SaveContext(ThreadContext& ctx) override; void LoadContext(const ThreadContext& ctx) override; diff --git a/src/core/arm/dyncom/arm_dyncom.cpp b/src/core/arm/dyncom/arm_dyncom.cpp index da955c9b91..4d72aef775 100644 --- a/src/core/arm/dyncom/arm_dyncom.cpp +++ b/src/core/arm/dyncom/arm_dyncom.cpp @@ -77,12 +77,6 @@ void ARM_DynCom::SetCP15Register(CP15Register reg, u32 value) { state->CP15[reg] = value; } -void ARM_DynCom::AddTicks(u64 ticks) { - down_count -= ticks; - if (down_count < 0) - CoreTiming::Advance(); -} - void ARM_DynCom::ExecuteInstructions(int num_instructions) { state->NumInstrsToExecute = num_instructions; @@ -90,7 +84,7 @@ void ARM_DynCom::ExecuteInstructions(int num_instructions) { // executing one instruction at a time. Otherwise, if a block is being executed, more // instructions may actually be executed than specified. unsigned ticks_executed = InterpreterMainLoop(state.get()); - AddTicks(ticks_executed); + CoreTiming::AddTicks(ticks_executed); } void ARM_DynCom::SaveContext(ThreadContext& ctx) { diff --git a/src/core/arm/dyncom/arm_dyncom.h b/src/core/arm/dyncom/arm_dyncom.h index 0ae5356713..fc1ffed6aa 100644 --- a/src/core/arm/dyncom/arm_dyncom.h +++ b/src/core/arm/dyncom/arm_dyncom.h @@ -31,8 +31,6 @@ public: u32 GetCP15Register(CP15Register reg) override; void SetCP15Register(CP15Register reg, u32 value) override; - void AddTicks(u64 ticks) override; - void SaveContext(ThreadContext& ctx) override; void LoadContext(const ThreadContext& ctx) override; diff --git a/src/core/core_timing.cpp b/src/core/core_timing.cpp index 276ecfdf68..5e2a5d00fc 100644 --- a/src/core/core_timing.cpp +++ b/src/core/core_timing.cpp @@ -57,6 +57,9 @@ static s64 idled_cycles; static s64 last_global_time_ticks; static s64 last_global_time_us; +static s64 down_count = 0; ///< A decreasing counter of remaining cycles before the next event, + /// decreased by the cpu run loop + static std::recursive_mutex external_event_section; // Warning: not included in save state. @@ -146,7 +149,7 @@ void UnregisterAllEvents() { } void Init() { - Core::CPU().down_count = INITIAL_SLICE_LENGTH; + down_count = INITIAL_SLICE_LENGTH; g_slice_length = INITIAL_SLICE_LENGTH; global_timer = 0; idled_cycles = 0; @@ -185,8 +188,15 @@ void Shutdown() { } } +void AddTicks(u64 ticks) { + down_count -= ticks; + if (down_count < 0) { + Advance(); + } +} + u64 GetTicks() { - return (u64)global_timer + g_slice_length - Core::CPU().down_count; + return (u64)global_timer + g_slice_length - down_count; } u64 GetIdleTicks() { @@ -460,18 +470,18 @@ void MoveEvents() { } void ForceCheck() { - s64 cycles_executed = g_slice_length - Core::CPU().down_count; + s64 cycles_executed = g_slice_length - down_count; global_timer += cycles_executed; // This will cause us to check for new events immediately. - Core::CPU().down_count = 0; + down_count = 0; // But let's not eat a bunch more time in Advance() because of this. g_slice_length = 0; } void Advance() { - s64 cycles_executed = g_slice_length - Core::CPU().down_count; + s64 cycles_executed = g_slice_length - down_count; global_timer += cycles_executed; - Core::CPU().down_count = g_slice_length; + down_count = g_slice_length; if (has_ts_events) MoveEvents(); @@ -480,7 +490,7 @@ void Advance() { if (!first) { if (g_slice_length < 10000) { g_slice_length += 10000; - Core::CPU().down_count += g_slice_length; + down_count += g_slice_length; } } else { // Note that events can eat cycles as well. @@ -490,7 +500,7 @@ void Advance() { const int diff = target - g_slice_length; g_slice_length += diff; - Core::CPU().down_count += diff; + down_count += diff; } if (advance_callback) advance_callback(static_cast(cycles_executed)); @@ -506,12 +516,12 @@ void LogPendingEvents() { } void Idle(int max_idle) { - s64 cycles_down = Core::CPU().down_count; + s64 cycles_down = down_count; if (max_idle != 0 && cycles_down > max_idle) cycles_down = max_idle; if (first && cycles_down > 0) { - s64 cycles_executed = g_slice_length - Core::CPU().down_count; + s64 cycles_executed = g_slice_length - down_count; s64 cycles_next_event = first->time - global_timer; if (cycles_next_event < cycles_executed + cycles_down) { @@ -526,9 +536,9 @@ void Idle(int max_idle) { cycles_down / (float)(g_clock_rate_arm11 * 0.001f)); idled_cycles += cycles_down; - Core::CPU().down_count -= cycles_down; - if (Core::CPU().down_count == 0) - Core::CPU().down_count = -1; + down_count -= cycles_down; + if (down_count == 0) + down_count = -1; } std::string GetScheduledEventsSummary() { diff --git a/src/core/core_timing.h b/src/core/core_timing.h index d2f85cd4d6..897350801d 100644 --- a/src/core/core_timing.h +++ b/src/core/core_timing.h @@ -67,6 +67,12 @@ void Shutdown(); typedef void (*MHzChangeCallback)(); typedef std::function TimedCallback; +/** +* Advance the CPU core by the specified number of ticks (e.g. to simulate CPU execution time) +* @param ticks Number of ticks to advance the CPU core +*/ +void AddTicks(u64 ticks); + u64 GetTicks(); u64 GetIdleTicks(); u64 GetGlobalTimeUs(); diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index fefd508054..6be5db13ff 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -1039,7 +1039,7 @@ static void SleepThread(s64 nanoseconds) { static s64 GetSystemTick() { s64 result = CoreTiming::GetTicks(); // Advance time to defeat dumb games (like Cubic Ninja) that busy-wait for the frame to end. - Core::CPU().AddTicks(150); // Measured time between two calls on a 9.2 o3DS with Ninjhax 1.1b + CoreTiming::AddTicks(150); // Measured time between two calls on a 9.2 o3DS with Ninjhax 1.1b return result; } diff --git a/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp b/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp index 86de41773c..83719a58e7 100644 --- a/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp +++ b/src/tests/core/arm/dyncom/arm_dyncom_vfp_tests.cpp @@ -5,6 +5,7 @@ #include #include "core/arm/dyncom/arm_dyncom.h" +#include "core/core_timing.h" #include "tests/core/arm/arm_test_common.h" namespace ArmTests { @@ -29,7 +30,6 @@ TEST_CASE("ARM_DynCom (vfp): vadd", "[arm_dyncom]") { }}; for (const auto& test_case : test_cases) { - dyncom.down_count = 1000; // Ensure that CoreTimeing will not be called. dyncom.SetPC(0); dyncom.SetVFPSystemReg(VFP_FPSCR, test_case.initial_fpscr); dyncom.SetVFPReg(4, test_case.a); From 5bae5a48b90cc9f6c847040e6f486296ed135017 Mon Sep 17 00:00:00 2001 From: Subv Date: Sat, 30 Sep 2017 13:19:58 -0500 Subject: [PATCH 176/195] Services/NIM: Implement CheckForSysUpdateEvent. Implementation verified by reverse engineering. This lets the Home Menu boot without crashing on startup. --- src/core/hle/service/nim/nim.cpp | 18 +++++++++++++++++- src/core/hle/service/nim/nim.h | 11 +++++++++++ src/core/hle/service/nim/nim_u.cpp | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/core/hle/service/nim/nim.cpp b/src/core/hle/service/nim/nim.cpp index d5624fe54f..b10d5852ba 100644 --- a/src/core/hle/service/nim/nim.cpp +++ b/src/core/hle/service/nim/nim.cpp @@ -5,6 +5,8 @@ #include "common/common_types.h" #include "common/logging/log.h" #include "core/hle/ipc.h" +#include "core/hle/ipc_helpers.h" +#include "core/hle/kernel/event.h" #include "core/hle/service/nim/nim.h" #include "core/hle/service/nim/nim_aoc.h" #include "core/hle/service/nim/nim_s.h" @@ -14,6 +16,16 @@ namespace Service { namespace NIM { +static Kernel::SharedPtr nim_system_update_event; + +void CheckForSysUpdateEvent(Service::Interface* self) { + IPC::RequestParser rp(Kernel::GetCommandBuffer(), 0x5, 0, 0); // 0x50000 + IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); + rb.Push(RESULT_SUCCESS); + rb.PushCopyHandles(Kernel::g_handle_table.Create(nim_system_update_event).Unwrap()); + LOG_TRACE(Service_NIM, "called"); +} + void CheckSysUpdateAvailable(Service::Interface* self) { u32* cmd_buff = Kernel::GetCommandBuffer(); @@ -29,9 +41,13 @@ void Init() { AddService(new NIM_AOC_Interface); AddService(new NIM_S_Interface); AddService(new NIM_U_Interface); + + nim_system_update_event = Kernel::Event::Create(ResetType::OneShot, "NIM System Update Event"); } -void Shutdown() {} +void Shutdown() { + nim_system_update_event = nullptr; +} } // namespace NIM diff --git a/src/core/hle/service/nim/nim.h b/src/core/hle/service/nim/nim.h index c3106f18b0..dbf605e5a6 100644 --- a/src/core/hle/service/nim/nim.h +++ b/src/core/hle/service/nim/nim.h @@ -10,6 +10,17 @@ class Interface; namespace NIM { +/** + * NIM::CheckForSysUpdateEvent service function + * Inputs: + * 1 : None + * Outputs: + * 1 : Result of function, 0 on success, otherwise error code + * 2 : Copy handle descriptor + * 3 : System Update event handle + */ +void CheckForSysUpdateEvent(Service::Interface* self); + /** * NIM::CheckSysUpdateAvailable service function * Inputs: diff --git a/src/core/hle/service/nim/nim_u.cpp b/src/core/hle/service/nim/nim_u.cpp index 7664bad60e..5696602780 100644 --- a/src/core/hle/service/nim/nim_u.cpp +++ b/src/core/hle/service/nim/nim_u.cpp @@ -12,7 +12,7 @@ const Interface::FunctionInfo FunctionTable[] = { {0x00010000, nullptr, "StartSysUpdate"}, {0x00020000, nullptr, "GetUpdateDownloadProgress"}, {0x00040000, nullptr, "FinishTitlesInstall"}, - {0x00050000, nullptr, "CheckForSysUpdateEvent"}, + {0x00050000, CheckForSysUpdateEvent, "CheckForSysUpdateEvent"}, {0x00090000, CheckSysUpdateAvailable, "CheckSysUpdateAvailable"}, {0x000A0000, nullptr, "GetState"}, {0x000B0000, nullptr, "GetSystemTitleHash"}, From c93e5ecfe68028c75e36a861fff2e287875f5794 Mon Sep 17 00:00:00 2001 From: shinyquagsire23 Date: Mon, 25 Sep 2017 22:21:39 -0600 Subject: [PATCH 177/195] file_sys/archive_ncch: use NCCHContainer instead of loading .romfs files --- src/core/file_sys/archive_ncch.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/core/file_sys/archive_ncch.cpp b/src/core/file_sys/archive_ncch.cpp index 6d90077313..19e1eb981f 100644 --- a/src/core/file_sys/archive_ncch.cpp +++ b/src/core/file_sys/archive_ncch.cpp @@ -13,7 +13,9 @@ #include "core/file_sys/archive_ncch.h" #include "core/file_sys/errors.h" #include "core/file_sys/ivfc_archive.h" +#include "core/file_sys/ncch_container.h" #include "core/hle/service/fs/archive.h" +#include "core/loader/loader.h" //////////////////////////////////////////////////////////////////////////////////////////////////// // FileSys namespace @@ -25,8 +27,8 @@ static std::string GetNCCHContainerPath(const std::string& nand_directory) { } static std::string GetNCCHPath(const std::string& mount_point, u32 high, u32 low) { - return Common::StringFromFormat("%s%08x/%08x/content/00000000.app.romfs", mount_point.c_str(), - high, low); + return Common::StringFromFormat("%s%08x/%08x/content/00000000.app", mount_point.c_str(), high, + low); } ArchiveFactory_NCCH::ArchiveFactory_NCCH(const std::string& nand_directory) @@ -38,9 +40,14 @@ ResultVal> ArchiveFactory_NCCH::Open(const Path& u32 high = data[1]; u32 low = data[0]; std::string file_path = GetNCCHPath(mount_point, high, low); - auto file = std::make_shared(file_path, "rb"); - if (!file->IsOpen()) { + std::shared_ptr romfs_file; + u64 romfs_offset = 0; + u64 romfs_size = 0; + auto ncch_container = NCCHContainer(file_path); + + if (ncch_container.ReadRomFS(romfs_file, romfs_offset, romfs_size) != + Loader::ResultStatus::Success) { // High Title ID of the archive: The category (https://3dbrew.org/wiki/Title_list). constexpr u32 shared_data_archive = 0x0004009B; constexpr u32 system_data_archive = 0x000400DB; @@ -74,9 +81,8 @@ ResultVal> ArchiveFactory_NCCH::Open(const Path& } return ERROR_NOT_FOUND; } - auto size = file->GetSize(); - auto archive = std::make_unique(file, 0, size); + auto archive = std::make_unique(romfs_file, romfs_offset, romfs_size); return MakeResult>(std::move(archive)); } From e21f2348e7da4ba2de9fe287276e8c215bcfe9d0 Mon Sep 17 00:00:00 2001 From: shinyquagsire23 Date: Sun, 1 Oct 2017 10:30:47 -0600 Subject: [PATCH 178/195] file_sys/ncch_container: add RomFS, ExeFS override to allow for backward compatibility with existing .romfs system archive dumps --- src/core/file_sys/ncch_container.cpp | 255 +++++++++++++++++++-------- src/core/file_sys/ncch_container.h | 30 ++++ 2 files changed, 211 insertions(+), 74 deletions(-) diff --git a/src/core/file_sys/ncch_container.cpp b/src/core/file_sys/ncch_container.cpp index 59c72f3e91..b9fb940c7b 100644 --- a/src/core/file_sys/ncch_container.cpp +++ b/src/core/file_sys/ncch_container.cpp @@ -116,92 +116,143 @@ Loader::ResultStatus NCCHContainer::Load() { if (is_loaded) return Loader::ResultStatus::Success; - // Reset read pointer in case this file has been read before. - file.Seek(0, SEEK_SET); + if (file.IsOpen()) { + // Reset read pointer in case this file has been read before. + file.Seek(0, SEEK_SET); - if (file.ReadBytes(&ncch_header, sizeof(NCCH_Header)) != sizeof(NCCH_Header)) - return Loader::ResultStatus::Error; - - // Skip NCSD header and load first NCCH (NCSD is just a container of NCCH files)... - if (Loader::MakeMagic('N', 'C', 'S', 'D') == ncch_header.magic) { - LOG_DEBUG(Service_FS, "Only loading the first (bootable) NCCH within the NCSD file!"); - ncch_offset = 0x4000; - file.Seek(ncch_offset, SEEK_SET); - file.ReadBytes(&ncch_header, sizeof(NCCH_Header)); - } - - // Verify we are loading the correct file type... - if (Loader::MakeMagic('N', 'C', 'C', 'H') != ncch_header.magic) - return Loader::ResultStatus::ErrorInvalidFormat; - - // System archives and DLC don't have an extended header but have RomFS - if (ncch_header.extended_header_size) { - if (file.ReadBytes(&exheader_header, sizeof(ExHeader_Header)) != sizeof(ExHeader_Header)) + if (file.ReadBytes(&ncch_header, sizeof(NCCH_Header)) != sizeof(NCCH_Header)) return Loader::ResultStatus::Error; - is_compressed = (exheader_header.codeset_info.flags.flag & 1) == 1; - u32 entry_point = exheader_header.codeset_info.text.address; - u32 code_size = exheader_header.codeset_info.text.code_size; - u32 stack_size = exheader_header.codeset_info.stack_size; - u32 bss_size = exheader_header.codeset_info.bss_size; - u32 core_version = exheader_header.arm11_system_local_caps.core_version; - u8 priority = exheader_header.arm11_system_local_caps.priority; - u8 resource_limit_category = - exheader_header.arm11_system_local_caps.resource_limit_category; - - LOG_DEBUG(Service_FS, "Name: %s", exheader_header.codeset_info.name); - LOG_DEBUG(Service_FS, "Program ID: %016" PRIX64, ncch_header.program_id); - LOG_DEBUG(Service_FS, "Code compressed: %s", is_compressed ? "yes" : "no"); - LOG_DEBUG(Service_FS, "Entry point: 0x%08X", entry_point); - LOG_DEBUG(Service_FS, "Code size: 0x%08X", code_size); - LOG_DEBUG(Service_FS, "Stack size: 0x%08X", stack_size); - LOG_DEBUG(Service_FS, "Bss size: 0x%08X", bss_size); - LOG_DEBUG(Service_FS, "Core version: %d", core_version); - LOG_DEBUG(Service_FS, "Thread priority: 0x%X", priority); - LOG_DEBUG(Service_FS, "Resource limit category: %d", resource_limit_category); - LOG_DEBUG(Service_FS, "System Mode: %d", - static_cast(exheader_header.arm11_system_local_caps.system_mode)); - - if (exheader_header.system_info.jump_id != ncch_header.program_id) { - LOG_ERROR(Service_FS, "ExHeader Program ID mismatch: the ROM is probably encrypted."); - return Loader::ResultStatus::ErrorEncrypted; + // Skip NCSD header and load first NCCH (NCSD is just a container of NCCH files)... + if (Loader::MakeMagic('N', 'C', 'S', 'D') == ncch_header.magic) { + LOG_DEBUG(Service_FS, "Only loading the first (bootable) NCCH within the NCSD file!"); + ncch_offset = 0x4000; + file.Seek(ncch_offset, SEEK_SET); + file.ReadBytes(&ncch_header, sizeof(NCCH_Header)); } - has_exheader = true; + // Verify we are loading the correct file type... + if (Loader::MakeMagic('N', 'C', 'C', 'H') != ncch_header.magic) + return Loader::ResultStatus::ErrorInvalidFormat; + + has_header = true; + + // System archives and DLC don't have an extended header but have RomFS + if (ncch_header.extended_header_size) { + if (file.ReadBytes(&exheader_header, sizeof(ExHeader_Header)) != + sizeof(ExHeader_Header)) + return Loader::ResultStatus::Error; + + is_compressed = (exheader_header.codeset_info.flags.flag & 1) == 1; + u32 entry_point = exheader_header.codeset_info.text.address; + u32 code_size = exheader_header.codeset_info.text.code_size; + u32 stack_size = exheader_header.codeset_info.stack_size; + u32 bss_size = exheader_header.codeset_info.bss_size; + u32 core_version = exheader_header.arm11_system_local_caps.core_version; + u8 priority = exheader_header.arm11_system_local_caps.priority; + u8 resource_limit_category = + exheader_header.arm11_system_local_caps.resource_limit_category; + + LOG_DEBUG(Service_FS, "Name: %s", + exheader_header.codeset_info.name); + LOG_DEBUG(Service_FS, "Program ID: %016" PRIX64, + ncch_header.program_id); + LOG_DEBUG(Service_FS, "Code compressed: %s", is_compressed ? "yes" : "no"); + LOG_DEBUG(Service_FS, "Entry point: 0x%08X", entry_point); + LOG_DEBUG(Service_FS, "Code size: 0x%08X", code_size); + LOG_DEBUG(Service_FS, "Stack size: 0x%08X", stack_size); + LOG_DEBUG(Service_FS, "Bss size: 0x%08X", bss_size); + LOG_DEBUG(Service_FS, "Core version: %d", core_version); + LOG_DEBUG(Service_FS, "Thread priority: 0x%X", priority); + LOG_DEBUG(Service_FS, "Resource limit category: %d", resource_limit_category); + LOG_DEBUG(Service_FS, "System Mode: %d", + static_cast(exheader_header.arm11_system_local_caps.system_mode)); + + if (exheader_header.system_info.jump_id != ncch_header.program_id) { + LOG_ERROR(Service_FS, + "ExHeader Program ID mismatch: the ROM is probably encrypted."); + return Loader::ResultStatus::ErrorEncrypted; + } + + has_exheader = true; + } + + // DLC can have an ExeFS and a RomFS but no extended header + if (ncch_header.exefs_size) { + exefs_offset = ncch_header.exefs_offset * kBlockSize; + u32 exefs_size = ncch_header.exefs_size * kBlockSize; + + LOG_DEBUG(Service_FS, "ExeFS offset: 0x%08X", exefs_offset); + LOG_DEBUG(Service_FS, "ExeFS size: 0x%08X", exefs_size); + + file.Seek(exefs_offset + ncch_offset, SEEK_SET); + if (file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)) != sizeof(ExeFs_Header)) + return Loader::ResultStatus::Error; + + exefs_file = FileUtil::IOFile(filepath, "rb"); + has_exefs = true; + } + + if (ncch_header.romfs_offset != 0 && ncch_header.romfs_size != 0) + has_romfs = true; } - // DLC can have an ExeFS and a RomFS but no extended header - if (ncch_header.exefs_size) { - exefs_offset = ncch_header.exefs_offset * kBlockSize; - u32 exefs_size = ncch_header.exefs_size * kBlockSize; + LoadOverrides(); - LOG_DEBUG(Service_FS, "ExeFS offset: 0x%08X", exefs_offset); - LOG_DEBUG(Service_FS, "ExeFS size: 0x%08X", exefs_size); - - file.Seek(exefs_offset + ncch_offset, SEEK_SET); - if (file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)) != sizeof(ExeFs_Header)) - return Loader::ResultStatus::Error; - - has_exefs = true; - } - - if (ncch_header.romfs_offset != 0 && ncch_header.romfs_size != 0) - has_romfs = true; + // We need at least one of these or overrides, practically + if (!(has_exefs || has_romfs || is_tainted)) + return Loader::ResultStatus::Error; is_loaded = true; return Loader::ResultStatus::Success; } -Loader::ResultStatus NCCHContainer::LoadSectionExeFS(const char* name, std::vector& buffer) { - if (!file.IsOpen()) - return Loader::ResultStatus::Error; +Loader::ResultStatus NCCHContainer::LoadOverrides() { + // Check for split-off files, mark the archive as tainted if we will use them + std::string romfs_override = filepath + ".romfs"; + if (FileUtil::Exists(romfs_override)) { + is_tainted = true; + } + // If we have a split-off exefs file/folder, it takes priority + std::string exefs_override = filepath + ".exefs"; + std::string exefsdir_override = filepath + ".exefsdir/"; + if (FileUtil::Exists(exefs_override)) { + exefs_file = FileUtil::IOFile(exefs_override, "rb"); + + if (exefs_file.ReadBytes(&exefs_header, sizeof(ExeFs_Header)) == sizeof(ExeFs_Header)) { + LOG_DEBUG(Service_FS, "Loading ExeFS section from %s", exefs_override.c_str()); + exefs_offset = 0; + is_tainted = true; + has_exefs = true; + } else { + exefs_file = FileUtil::IOFile(filepath, "rb"); + } + } else if (FileUtil::Exists(exefsdir_override) && FileUtil::IsDirectory(exefsdir_override)) { + is_tainted = true; + } + + if (is_tainted) + LOG_WARNING(Service_FS, + "Loaded NCCH %s is tainted, application behavior may not be as expected!", + filepath.c_str()); + + return Loader::ResultStatus::Success; +} + +Loader::ResultStatus NCCHContainer::LoadSectionExeFS(const char* name, std::vector& buffer) { Loader::ResultStatus result = Load(); if (result != Loader::ResultStatus::Success) return result; - if (!has_exefs) - return Loader::ResultStatus::ErrorNotUsed; + // Check if we have files that can drop-in and replace + result = LoadOverrideExeFSSection(name, buffer); + if (result == Loader::ResultStatus::Success || !has_exefs) + return result; + + // If we don't have any separate files, we'll need a full ExeFS + if (!exefs_file.IsOpen()) + return Loader::ResultStatus::Error; LOG_DEBUG(Service_FS, "%d sections:", kMaxSections); // Iterate through the ExeFs archive until we find a section with the specified name... @@ -215,7 +266,7 @@ Loader::ResultStatus NCCHContainer::LoadSectionExeFS(const char* name, std::vect s64 section_offset = (section.offset + exefs_offset + sizeof(ExeFs_Header) + ncch_offset); - file.Seek(section_offset, SEEK_SET); + exefs_file.Seek(section_offset, SEEK_SET); if (strcmp(section.name, ".code") == 0 && is_compressed) { // Section is compressed, read compressed .code section... @@ -226,7 +277,7 @@ Loader::ResultStatus NCCHContainer::LoadSectionExeFS(const char* name, std::vect return Loader::ResultStatus::ErrorMemoryAllocationFailed; } - if (file.ReadBytes(&temp_buffer[0], section.size) != section.size) + if (exefs_file.ReadBytes(&temp_buffer[0], section.size) != section.size) return Loader::ResultStatus::Error; // Decompress .code section... @@ -237,7 +288,7 @@ Loader::ResultStatus NCCHContainer::LoadSectionExeFS(const char* name, std::vect } else { // Section is uncompressed... buffer.resize(section.size); - if (file.ReadBytes(&buffer[0], section.size) != section.size) + if (exefs_file.ReadBytes(&buffer[0], section.size) != section.size) return Loader::ResultStatus::Error; } return Loader::ResultStatus::Success; @@ -246,20 +297,56 @@ Loader::ResultStatus NCCHContainer::LoadSectionExeFS(const char* name, std::vect return Loader::ResultStatus::ErrorNotUsed; } -Loader::ResultStatus NCCHContainer::ReadRomFS(std::shared_ptr& romfs_file, - u64& offset, u64& size) { - if (!file.IsOpen()) +Loader::ResultStatus NCCHContainer::LoadOverrideExeFSSection(const char* name, + std::vector& buffer) { + std::string override_name; + + // Map our section name to the extracted equivalent + if (!strcmp(name, ".code")) + override_name = "code.bin"; + else if (!strcmp(name, "icon")) + override_name = "code.bin"; + else if (!strcmp(name, "banner")) + override_name = "banner.bnr"; + else if (!strcmp(name, "logo")) + override_name = "logo.bcma.lz"; + else return Loader::ResultStatus::Error; + std::string section_override = filepath + ".exefsdir/" + override_name; + FileUtil::IOFile section_file(section_override, "rb"); + + if (section_file.IsOpen()) { + auto section_size = section_file.GetSize(); + buffer.resize(section_size); + + section_file.Seek(0, SEEK_SET); + if (section_file.ReadBytes(&buffer[0], section_size) == section_size) { + LOG_WARNING(Service_FS, "File %s overriding built-in ExeFS file", + section_override.c_str()); + return Loader::ResultStatus::Success; + } + } + return Loader::ResultStatus::ErrorNotUsed; +} + +Loader::ResultStatus NCCHContainer::ReadRomFS(std::shared_ptr& romfs_file, + u64& offset, u64& size) { Loader::ResultStatus result = Load(); if (result != Loader::ResultStatus::Success) return result; + if (ReadOverrideRomFS(romfs_file, offset, size) == Loader::ResultStatus::Success) + return Loader::ResultStatus::Success; + if (!has_romfs) { LOG_DEBUG(Service_FS, "RomFS requested from NCCH which has no RomFS"); return Loader::ResultStatus::ErrorNotUsed; } + if (!file.IsOpen()) + return Loader::ResultStatus::Error; + u32 romfs_offset = ncch_offset + (ncch_header.romfs_offset * kBlockSize) + 0x1000; u32 romfs_size = (ncch_header.romfs_size * kBlockSize) - 0x1000; @@ -280,11 +367,31 @@ Loader::ResultStatus NCCHContainer::ReadRomFS(std::shared_ptr& return Loader::ResultStatus::Success; } +Loader::ResultStatus NCCHContainer::ReadOverrideRomFS(std::shared_ptr& romfs_file, + u64& offset, u64& size) { + // Check for RomFS overrides + std::string split_filepath = filepath + ".romfs"; + if (FileUtil::Exists(split_filepath)) { + romfs_file = std::make_shared(split_filepath, "rb"); + if (romfs_file->IsOpen()) { + LOG_WARNING(Service_FS, "File %s overriding built-in RomFS", split_filepath.c_str()); + offset = 0; + size = romfs_file->GetSize(); + return Loader::ResultStatus::Success; + } + } + + return Loader::ResultStatus::ErrorNotUsed; +} + Loader::ResultStatus NCCHContainer::ReadProgramId(u64_le& program_id) { Loader::ResultStatus result = Load(); if (result != Loader::ResultStatus::Success) return result; + if (!has_header) + return Loader::ResultStatus::ErrorNotUsed; + program_id = ncch_header.program_id; return Loader::ResultStatus::Success; } diff --git a/src/core/file_sys/ncch_container.h b/src/core/file_sys/ncch_container.h index 8af9032b42..2cc9d13dcf 100644 --- a/src/core/file_sys/ncch_container.h +++ b/src/core/file_sys/ncch_container.h @@ -179,6 +179,13 @@ public: */ Loader::ResultStatus Load(); + /** + * Attempt to find overridden sections for the NCCH and mark the container as tainted + * if any are found. + * @return ResultStatus result of function + */ + Loader::ResultStatus LoadOverrides(); + /** * Reads an application ExeFS section of an NCCH file (e.g. .code, .logo, etc.) * @param name Name of section to read out of NCCH file @@ -187,6 +194,15 @@ public: */ Loader::ResultStatus LoadSectionExeFS(const char* name, std::vector& buffer); + /** + * Reads an application ExeFS section from external files instead of an NCCH file, + * (e.g. code.bin, logo.bcma.lz, icon.icn, banner.bnr) + * @param name Name of section to read from external files + * @param buffer Vector to read data into + * @return ResultStatus result of function + */ + Loader::ResultStatus LoadOverrideExeFSSection(const char* name, std::vector& buffer); + /** * Get the RomFS of the NCCH container * Since the RomFS can be huge, we return a file reference instead of copying to a buffer @@ -198,6 +214,17 @@ public: Loader::ResultStatus ReadRomFS(std::shared_ptr& romfs_file, u64& offset, u64& size); + /** + * Get the override RomFS of the NCCH container + * Since the RomFS can be huge, we return a file reference instead of copying to a buffer + * @param romfs_file The file containing the RomFS + * @param offset The offset the romfs begins on + * @param size The size of the romfs + * @return ResultStatus result of function + */ + Loader::ResultStatus ReadOverrideRomFS(std::shared_ptr& romfs_file, + u64& offset, u64& size); + /** * Get the Program ID of the NCCH container * @return ResultStatus result of function @@ -227,10 +254,12 @@ public: ExHeader_Header exheader_header; private: + bool has_header = false; bool has_exheader = false; bool has_exefs = false; bool has_romfs = false; + bool is_tainted = false; // Are there parts of this container being overridden? bool is_loaded = false; bool is_compressed = false; @@ -239,6 +268,7 @@ private: std::string filepath; FileUtil::IOFile file; + FileUtil::IOFile exefs_file; }; } // namespace FileSys From 8e10c9bb2e8690055ba07003ebd53a5215f82f8f Mon Sep 17 00:00:00 2001 From: shinyquagsire23 Date: Sun, 1 Oct 2017 10:32:43 -0600 Subject: [PATCH 179/195] file_sys: add class for Title Metadata (TMD) --- src/core/CMakeLists.txt | 1 + src/core/file_sys/title_metadata.cpp | 212 +++++++++++++++++++++++++++ src/core/file_sys/title_metadata.h | 125 ++++++++++++++++ 3 files changed, 338 insertions(+) create mode 100644 src/core/file_sys/title_metadata.cpp create mode 100644 src/core/file_sys/title_metadata.h diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index 3ed6199916..2618da18c4 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -29,6 +29,7 @@ set(SRCS file_sys/ncch_container.cpp file_sys/path_parser.cpp file_sys/savedata_archive.cpp + file_sys/title_metadata.cpp frontend/camera/blank_camera.cpp frontend/camera/factory.cpp frontend/camera/interface.cpp diff --git a/src/core/file_sys/title_metadata.cpp b/src/core/file_sys/title_metadata.cpp new file mode 100644 index 0000000000..1ef8840a0a --- /dev/null +++ b/src/core/file_sys/title_metadata.cpp @@ -0,0 +1,212 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include +#include +#include "common/alignment.h" +#include "common/file_util.h" +#include "common/logging/log.h" +#include "core/file_sys/title_metadata.h" +#include "core/loader/loader.h" + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// FileSys namespace + +namespace FileSys { + +static u32 GetSignatureSize(u32 signature_type) { + switch (signature_type) { + case Rsa4096Sha1: + case Rsa4096Sha256: + return 0x200; + + case Rsa2048Sha1: + case Rsa2048Sha256: + return 0x100; + + case EllipticSha1: + case EcdsaSha256: + return 0x3C; + } +} + +Loader::ResultStatus TitleMetadata::Load() { + FileUtil::IOFile file(filepath, "rb"); + if (!file.IsOpen()) + return Loader::ResultStatus::Error; + + if (!file.ReadBytes(&signature_type, sizeof(u32_be))) + return Loader::ResultStatus::Error; + + // Signature lengths are variable, and the body follows the signature + u32 signature_size = GetSignatureSize(signature_type); + + tmd_signature.resize(signature_size); + if (!file.ReadBytes(&tmd_signature[0], signature_size)) + return Loader::ResultStatus::Error; + + // The TMD body start position is rounded to the nearest 0x40 after the signature + size_t body_start = Common::AlignUp(signature_size + sizeof(u32), 0x40); + file.Seek(body_start, SEEK_SET); + + // Read our TMD body, then load the amount of ContentChunks specified + if (file.ReadBytes(&tmd_body, sizeof(TitleMetadata::Body)) != sizeof(TitleMetadata::Body)) + return Loader::ResultStatus::Error; + + for (u16 i = 0; i < tmd_body.content_count; i++) { + ContentChunk chunk; + if (file.ReadBytes(&chunk, sizeof(ContentChunk)) == sizeof(ContentChunk)) { + tmd_chunks.push_back(chunk); + } else { + LOG_ERROR(Service_FS, "Malformed TMD %s, failed to load content chunk index %u!", + filepath.c_str(), i); + return Loader::ResultStatus::ErrorInvalidFormat; + } + } + + return Loader::ResultStatus::Success; +} + +Loader::ResultStatus TitleMetadata::Save() { + FileUtil::IOFile file(filepath, "wb"); + if (!file.IsOpen()) + return Loader::ResultStatus::Error; + + if (!file.WriteBytes(&signature_type, sizeof(u32_be))) + return Loader::ResultStatus::Error; + + // Signature lengths are variable, and the body follows the signature + u32 signature_size = GetSignatureSize(signature_type); + + if (!file.WriteBytes(tmd_signature.data(), signature_size)) + return Loader::ResultStatus::Error; + + // The TMD body start position is rounded to the nearest 0x40 after the signature + size_t body_start = Common::AlignUp(signature_size + sizeof(u32), 0x40); + file.Seek(body_start, SEEK_SET); + + // Update our TMD body values and hashes + tmd_body.content_count = static_cast(tmd_chunks.size()); + + // TODO(shinyquagsire23): Do TMDs with more than one contentinfo exist? + // For now we'll just adjust the first index to hold all content chunks + // and ensure that no further content info data exists. + tmd_body.contentinfo = {}; + tmd_body.contentinfo[0].index = 0; + tmd_body.contentinfo[0].command_count = static_cast(tmd_chunks.size()); + + CryptoPP::SHA256 chunk_hash; + for (u16 i = 0; i < tmd_body.content_count; i++) { + chunk_hash.Update(reinterpret_cast(&tmd_chunks[i]), sizeof(ContentChunk)); + } + chunk_hash.Final(tmd_body.contentinfo[0].hash.data()); + + CryptoPP::SHA256 contentinfo_hash; + for (size_t i = 0; i < tmd_body.contentinfo.size(); i++) { + chunk_hash.Update(reinterpret_cast(&tmd_body.contentinfo[i]), sizeof(ContentInfo)); + } + chunk_hash.Final(tmd_body.contentinfo_hash.data()); + + // Write our TMD body, then write each of our ContentChunks + if (file.WriteBytes(&tmd_body, sizeof(TitleMetadata::Body)) != sizeof(TitleMetadata::Body)) + return Loader::ResultStatus::Error; + + for (u16 i = 0; i < tmd_body.content_count; i++) { + ContentChunk chunk = tmd_chunks[i]; + if (file.WriteBytes(&chunk, sizeof(ContentChunk)) != sizeof(ContentChunk)) + return Loader::ResultStatus::Error; + } + + return Loader::ResultStatus::Success; +} + +u64 TitleMetadata::GetTitleID() const { + return tmd_body.title_id; +} + +u32 TitleMetadata::GetTitleType() const { + return tmd_body.title_type; +} + +u16 TitleMetadata::GetTitleVersion() const { + return tmd_body.title_version; +} + +u64 TitleMetadata::GetSystemVersion() const { + return tmd_body.system_version; +} + +size_t TitleMetadata::GetContentCount() const { + return tmd_chunks.size(); +} + +u32 TitleMetadata::GetBootContentID() const { + return tmd_chunks[TMDContentIndex::Main].id; +} + +u32 TitleMetadata::GetManualContentID() const { + return tmd_chunks[TMDContentIndex::Manual].id; +} + +u32 TitleMetadata::GetDLPContentID() const { + return tmd_chunks[TMDContentIndex::DLP].id; +} + +void TitleMetadata::SetTitleID(u64 title_id) { + tmd_body.title_id = title_id; +} + +void TitleMetadata::SetTitleType(u32 type) { + tmd_body.title_type = type; +} + +void TitleMetadata::SetTitleVersion(u16 version) { + tmd_body.title_version = version; +} + +void TitleMetadata::SetSystemVersion(u64 version) { + tmd_body.system_version = version; +} + +void TitleMetadata::AddContentChunk(const ContentChunk& chunk) { + tmd_chunks.push_back(chunk); +} + +void TitleMetadata::Print() const { + LOG_DEBUG(Service_FS, "%s - %u chunks", filepath.c_str(), + static_cast(tmd_body.content_count)); + + // Content info describes ranges of content chunks + LOG_DEBUG(Service_FS, "Content info:"); + for (size_t i = 0; i < tmd_body.contentinfo.size(); i++) { + if (tmd_body.contentinfo[i].command_count == 0) + break; + + LOG_DEBUG(Service_FS, " Index %04X, Command Count %04X", + static_cast(tmd_body.contentinfo[i].index), + static_cast(tmd_body.contentinfo[i].command_count)); + } + + // For each content info, print their content chunk range + for (size_t i = 0; i < tmd_body.contentinfo.size(); i++) { + u16 index = static_cast(tmd_body.contentinfo[i].index); + u16 count = static_cast(tmd_body.contentinfo[i].command_count); + + if (count == 0) + continue; + + LOG_DEBUG(Service_FS, "Content chunks for content info index %zu:", i); + for (u16 j = index; j < index + count; j++) { + // Don't attempt to print content we don't have + if (j > tmd_body.content_count) + break; + + const ContentChunk& chunk = tmd_chunks[j]; + LOG_DEBUG(Service_FS, " ID %08X, Index %04X, Type %04x, Size %016" PRIX64, + static_cast(chunk.id), static_cast(chunk.index), + static_cast(chunk.type), static_cast(chunk.size)); + } + } +} +} // namespace FileSys diff --git a/src/core/file_sys/title_metadata.h b/src/core/file_sys/title_metadata.h new file mode 100644 index 0000000000..1fc157bf3f --- /dev/null +++ b/src/core/file_sys/title_metadata.h @@ -0,0 +1,125 @@ +// Copyright 2017 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include +#include "common/common_types.h" +#include "common/swap.h" + +namespace Loader { +enum class ResultStatus; +} + +//////////////////////////////////////////////////////////////////////////////////////////////////// +// FileSys namespace + +namespace FileSys { + +enum TMDSignatureType : u32 { + Rsa4096Sha1 = 0x10000, + Rsa2048Sha1 = 0x10001, + EllipticSha1 = 0x10002, + Rsa4096Sha256 = 0x10003, + Rsa2048Sha256 = 0x10004, + EcdsaSha256 = 0x10005 +}; + +enum TMDContentTypeFlag : u16 { + Encrypted = 1 << 1, + Disc = 1 << 2, + CFM = 1 << 3, + Optional = 1 << 14, + Shared = 1 << 15 +}; + +/** + * Helper which implements an interface to read and write Title Metadata (TMD) files. + * If a file path is provided and the file exists, it can be parsed and used, otherwise + * it must be created. The TMD file can then be interpreted, modified and/or saved. + */ +class TitleMetadata { +public: + struct ContentChunk { + u32_be id; + u16_be index; + u16_be type; + u64_be size; + std::array hash; + }; + + static_assert(sizeof(ContentChunk) == 0x30, "TMD ContentChunk structure size is wrong"); + + struct ContentInfo { + u16_be index; + u16_be command_count; + std::array hash; + }; + + static_assert(sizeof(ContentInfo) == 0x24, "TMD ContentInfo structure size is wrong"); + +#pragma pack(push, 1) + + struct Body { + std::array issuer; + u8 version; + u8 ca_crl_version; + u8 signer_crl_version; + u8 reserved; + u64_be system_version; + u64_be title_id; + u32_be title_type; + u16_be group_id; + u32_be savedata_size; + u32_be srl_private_savedata_size; + std::array reserved_2; + u8 srl_flag; + std::array reserved_3; + u32_be access_rights; + u16_be title_version; + u16_be content_count; + u16_be boot_content; + std::array reserved_4; + std::array contentinfo_hash; + std::array contentinfo; + }; + + static_assert(sizeof(Body) == 0x9C4, "TMD body structure size is wrong"); + +#pragma pack(pop) + + explicit TitleMetadata(std::string& path) : filepath(std::move(path)) {} + Loader::ResultStatus Load(); + Loader::ResultStatus Save(); + + u64 GetTitleID() const; + u32 GetTitleType() const; + u16 GetTitleVersion() const; + u64 GetSystemVersion() const; + size_t GetContentCount() const; + u32 GetBootContentID() const; + u32 GetManualContentID() const; + u32 GetDLPContentID() const; + + void SetTitleID(u64 title_id); + void SetTitleType(u32 type); + void SetTitleVersion(u16 version); + void SetSystemVersion(u64 version); + void AddContentChunk(const ContentChunk& chunk); + + void Print() const; + +private: + enum TMDContentIndex { Main = 0, Manual = 1, DLP = 2 }; + + Body tmd_body; + u32_be signature_type; + std::vector tmd_signature; + std::vector tmd_chunks; + + std::string filepath; +}; + +} // namespace FileSys From 4887d1859102234c594c3140c31217ff64791f37 Mon Sep 17 00:00:00 2001 From: shinyquagsire23 Date: Sun, 1 Oct 2017 10:41:40 -0600 Subject: [PATCH 180/195] file_sys, loader: add support for reading TMDs to determine app paths --- src/core/file_sys/archive_ncch.cpp | 15 +++++++++++++-- src/core/loader/ncch.cpp | 17 ++++++++++++++--- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/core/file_sys/archive_ncch.cpp b/src/core/file_sys/archive_ncch.cpp index 19e1eb981f..e8c5be983f 100644 --- a/src/core/file_sys/archive_ncch.cpp +++ b/src/core/file_sys/archive_ncch.cpp @@ -14,6 +14,7 @@ #include "core/file_sys/errors.h" #include "core/file_sys/ivfc_archive.h" #include "core/file_sys/ncch_container.h" +#include "core/file_sys/title_metadata.h" #include "core/hle/service/fs/archive.h" #include "core/loader/loader.h" @@ -27,8 +28,18 @@ static std::string GetNCCHContainerPath(const std::string& nand_directory) { } static std::string GetNCCHPath(const std::string& mount_point, u32 high, u32 low) { - return Common::StringFromFormat("%s%08x/%08x/content/00000000.app", mount_point.c_str(), high, - low); + u32 content_id = 0; + + // TODO(shinyquagsire23): Title database should be doing this path lookup + std::string content_path = + Common::StringFromFormat("%s%08x/%08x/content/", mount_point.c_str(), high, low); + std::string tmd_path = content_path + "00000000.tmd"; + TitleMetadata tmd(tmd_path); + if (tmd.Load() == Loader::ResultStatus::Success) { + content_id = tmd.GetBootContentID(); + } + + return Common::StringFromFormat("%s%08x.app", content_path.c_str(), content_id); } ArchiveFactory_NCCH::ArchiveFactory_NCCH(const std::string& nand_directory) diff --git a/src/core/loader/ncch.cpp b/src/core/loader/ncch.cpp index 66bc5823d2..52686e3641 100644 --- a/src/core/loader/ncch.cpp +++ b/src/core/loader/ncch.cpp @@ -14,6 +14,7 @@ #include "core/core.h" #include "core/file_sys/archive_selfncch.h" #include "core/file_sys/ncch_container.h" +#include "core/file_sys/title_metadata.h" #include "core/hle/kernel/process.h" #include "core/hle/kernel/resource_limit.h" #include "core/hle/service/cfg/cfg.h" @@ -49,9 +50,19 @@ static std::string GetUpdateNCCHPath(u64_le program_id) { u32 high = static_cast((program_id | UPDATE_MASK) >> 32); u32 low = static_cast((program_id | UPDATE_MASK) & 0xFFFFFFFF); - return Common::StringFromFormat("%sNintendo 3DS/%s/%s/title/%08x/%08x/content/00000000.app", - FileUtil::GetUserPath(D_SDMC_IDX).c_str(), SYSTEM_ID, SDCARD_ID, - high, low); + // TODO(shinyquagsire23): Title database should be doing this path lookup + std::string content_path = Common::StringFromFormat( + "%sNintendo 3DS/%s/%s/title/%08x/%08x/content/", FileUtil::GetUserPath(D_SDMC_IDX).c_str(), + SYSTEM_ID, SDCARD_ID, high, low); + std::string tmd_path = content_path + "00000000.tmd"; + + u32 content_id = 0; + FileSys::TitleMetadata tmd(tmd_path); + if (tmd.Load() == ResultStatus::Success) { + content_id = tmd.GetBootContentID(); + } + + return Common::StringFromFormat("%s%08x.app", content_path.c_str(), content_id); } std::pair, ResultStatus> AppLoader_NCCH::LoadKernelSystemMode() { From 8217ed7acb71bfa574e0a29e69b902a0c539c814 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 29 Sep 2017 14:47:52 -0500 Subject: [PATCH 181/195] Kernel/Thread: Added a helper function to get a thread's command buffer VAddr. --- src/core/hle/kernel/thread.cpp | 6 ++++++ src/core/hle/kernel/thread.h | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/core/hle/kernel/thread.cpp b/src/core/hle/kernel/thread.cpp index 11f7d21277..6ebc8c151c 100644 --- a/src/core/hle/kernel/thread.cpp +++ b/src/core/hle/kernel/thread.cpp @@ -534,6 +534,12 @@ s32 Thread::GetWaitObjectIndex(WaitObject* object) const { return static_cast(std::distance(match, wait_objects.rend()) - 1); } +VAddr Thread::GetCommandBufferAddress() const { + // Offset from the start of TLS at which the IPC command buffer begins. + static constexpr int CommandHeaderOffset = 0x80; + return GetTLSAddress() + CommandHeaderOffset; +} + //////////////////////////////////////////////////////////////////////////////////////////////////// void ThreadingInit() { diff --git a/src/core/hle/kernel/thread.h b/src/core/hle/kernel/thread.h index f02e1d43af..520ac22c2c 100644 --- a/src/core/hle/kernel/thread.h +++ b/src/core/hle/kernel/thread.h @@ -159,6 +159,12 @@ public: return tls_address; } + /* + * Returns the address of the current thread's command buffer, located in the TLS. + * @returns VAddr of the thread's command buffer. + */ + VAddr GetCommandBufferAddress() const; + /** * Returns whether this thread is waiting for all the objects in * its wait list to become ready, as a result of a WaitSynchronizationN call From 811c01e5fec3a1cc7a6faf5eaed11d1aaef31768 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 29 Sep 2017 19:38:54 -0500 Subject: [PATCH 182/195] Memory: Make ReadBlock take a Process parameter on which to operate --- src/core/memory.cpp | 40 ++++++++++++++++++++++++++++------------ src/core/memory.h | 2 ++ 2 files changed, 30 insertions(+), 12 deletions(-) diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 847e697106..da97038c65 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -82,10 +82,10 @@ void UnmapRegion(PageTable& page_table, VAddr base, u32 size) { * Gets a pointer to the exact memory at the virtual address (i.e. not page aligned) * using a VMA from the current process */ -static u8* GetPointerFromVMA(VAddr vaddr) { +static u8* GetPointerFromVMA(const Kernel::Process& process, VAddr vaddr) { u8* direct_pointer = nullptr; - auto& vm_manager = Kernel::g_current_process->vm_manager; + auto& vm_manager = process.vm_manager; auto it = vm_manager.FindVMA(vaddr); ASSERT(it != vm_manager.vma_map.end()); @@ -107,6 +107,14 @@ static u8* GetPointerFromVMA(VAddr vaddr) { return direct_pointer + (vaddr - vma.base); } +/** + * Gets a pointer to the exact memory at the virtual address (i.e. not page aligned) + * using a VMA from the current process. + */ +static u8* GetPointerFromVMA(VAddr vaddr) { + return GetPointerFromVMA(*Kernel::g_current_process, vaddr); +} + /** * This function should only be called for virtual addreses with attribute `PageType::Special`. */ @@ -470,7 +478,10 @@ u64 Read64(const VAddr addr) { return Read(addr); } -void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) { +void ReadBlock(const Kernel::Process& process, const VAddr src_addr, void* dest_buffer, + const size_t size) { + auto& page_table = process.vm_manager.page_table; + size_t remaining_size = size; size_t page_index = src_addr >> PAGE_BITS; size_t page_offset = src_addr & PAGE_MASK; @@ -479,7 +490,7 @@ void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) { const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); const VAddr current_vaddr = static_cast((page_index << PAGE_BITS) + page_offset); - switch (current_page_table->attributes[page_index]) { + switch (page_table.attributes[page_index]) { case PageType::Unmapped: { LOG_ERROR(HW_Memory, "unmapped ReadBlock @ 0x%08X (start address = 0x%08X, size = %zu)", current_vaddr, src_addr, size); @@ -487,29 +498,30 @@ void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) { break; } case PageType::Memory: { - DEBUG_ASSERT(current_page_table->pointers[page_index]); + DEBUG_ASSERT(page_table.pointers[page_index]); - const u8* src_ptr = current_page_table->pointers[page_index] + page_offset; + const u8* src_ptr = page_table.pointers[page_index] + page_offset; std::memcpy(dest_buffer, src_ptr, copy_amount); break; } case PageType::Special: { - DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); - - GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, dest_buffer, copy_amount); + MMIORegionPointer handler = GetMMIOHandler(page_table, current_vaddr); + DEBUG_ASSERT(handler); + handler->ReadBlock(current_vaddr, dest_buffer, copy_amount); break; } case PageType::RasterizerCachedMemory: { RasterizerFlushVirtualRegion(current_vaddr, static_cast(copy_amount), FlushMode::Flush); - std::memcpy(dest_buffer, GetPointerFromVMA(current_vaddr), copy_amount); + std::memcpy(dest_buffer, GetPointerFromVMA(process, current_vaddr), copy_amount); break; } case PageType::RasterizerCachedSpecial: { - DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); + MMIORegionPointer handler = GetMMIOHandler(page_table, current_vaddr); + DEBUG_ASSERT(handler); RasterizerFlushVirtualRegion(current_vaddr, static_cast(copy_amount), FlushMode::Flush); - GetMMIOHandler(current_vaddr)->ReadBlock(current_vaddr, dest_buffer, copy_amount); + handler->ReadBlock(current_vaddr, dest_buffer, copy_amount); break; } default: @@ -523,6 +535,10 @@ void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) { } } +void ReadBlock(const VAddr src_addr, void* dest_buffer, const size_t size) { + ReadBlock(*Kernel::g_current_process, src_addr, dest_buffer, size); +} + void Write8(const VAddr addr, const u8 data) { Write(addr, data); } diff --git a/src/core/memory.h b/src/core/memory.h index 347c08c781..5d4eb56a93 100644 --- a/src/core/memory.h +++ b/src/core/memory.h @@ -205,6 +205,8 @@ void Write16(VAddr addr, u16 data); void Write32(VAddr addr, u32 data); void Write64(VAddr addr, u64 data); +void ReadBlock(const Kernel::Process& process, const VAddr src_addr, void* dest_buffer, + size_t size); void ReadBlock(const VAddr src_addr, void* dest_buffer, size_t size); void WriteBlock(const VAddr dest_addr, const void* src_buffer, size_t size); void ZeroBlock(const VAddr dest_addr, const size_t size); From 1f2de7501b427f9f5ac1e5d244f8ec52eca9bc64 Mon Sep 17 00:00:00 2001 From: Subv Date: Fri, 29 Sep 2017 22:42:25 -0500 Subject: [PATCH 183/195] Memory: Make WriteBlock take a Process parameter on which to operate --- src/core/memory.cpp | 27 +++++++++++++++++---------- src/core/memory.h | 2 ++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/core/memory.cpp b/src/core/memory.cpp index da97038c65..7f58be6de8 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp @@ -555,7 +555,9 @@ void Write64(const VAddr addr, const u64 data) { Write(addr, data); } -void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size) { +void WriteBlock(const Kernel::Process& process, const VAddr dest_addr, const void* src_buffer, + const size_t size) { + auto& page_table = process.vm_manager.page_table; size_t remaining_size = size; size_t page_index = dest_addr >> PAGE_BITS; size_t page_offset = dest_addr & PAGE_MASK; @@ -564,7 +566,7 @@ void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size const size_t copy_amount = std::min(PAGE_SIZE - page_offset, remaining_size); const VAddr current_vaddr = static_cast((page_index << PAGE_BITS) + page_offset); - switch (current_page_table->attributes[page_index]) { + switch (page_table.attributes[page_index]) { case PageType::Unmapped: { LOG_ERROR(HW_Memory, "unmapped WriteBlock @ 0x%08X (start address = 0x%08X, size = %zu)", @@ -572,29 +574,30 @@ void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size break; } case PageType::Memory: { - DEBUG_ASSERT(current_page_table->pointers[page_index]); + DEBUG_ASSERT(page_table.pointers[page_index]); - u8* dest_ptr = current_page_table->pointers[page_index] + page_offset; + u8* dest_ptr = page_table.pointers[page_index] + page_offset; std::memcpy(dest_ptr, src_buffer, copy_amount); break; } case PageType::Special: { - DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); - - GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, src_buffer, copy_amount); + MMIORegionPointer handler = GetMMIOHandler(page_table, current_vaddr); + DEBUG_ASSERT(handler); + handler->WriteBlock(current_vaddr, src_buffer, copy_amount); break; } case PageType::RasterizerCachedMemory: { RasterizerFlushVirtualRegion(current_vaddr, static_cast(copy_amount), FlushMode::FlushAndInvalidate); - std::memcpy(GetPointerFromVMA(current_vaddr), src_buffer, copy_amount); + std::memcpy(GetPointerFromVMA(process, current_vaddr), src_buffer, copy_amount); break; } case PageType::RasterizerCachedSpecial: { - DEBUG_ASSERT(GetMMIOHandler(current_vaddr)); + MMIORegionPointer handler = GetMMIOHandler(page_table, current_vaddr); + DEBUG_ASSERT(handler); RasterizerFlushVirtualRegion(current_vaddr, static_cast(copy_amount), FlushMode::FlushAndInvalidate); - GetMMIOHandler(current_vaddr)->WriteBlock(current_vaddr, src_buffer, copy_amount); + handler->WriteBlock(current_vaddr, src_buffer, copy_amount); break; } default: @@ -608,6 +611,10 @@ void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size } } +void WriteBlock(const VAddr dest_addr, const void* src_buffer, const size_t size) { + WriteBlock(*Kernel::g_current_process, dest_addr, src_buffer, size); +} + void ZeroBlock(const VAddr dest_addr, const size_t size) { size_t remaining_size = size; size_t page_index = dest_addr >> PAGE_BITS; diff --git a/src/core/memory.h b/src/core/memory.h index 5d4eb56a93..dd599f73ec 100644 --- a/src/core/memory.h +++ b/src/core/memory.h @@ -208,6 +208,8 @@ void Write64(VAddr addr, u64 data); void ReadBlock(const Kernel::Process& process, const VAddr src_addr, void* dest_buffer, size_t size); void ReadBlock(const VAddr src_addr, void* dest_buffer, size_t size); +void WriteBlock(const Kernel::Process& process, const VAddr dest_addr, const void* src_buffer, + size_t size); void WriteBlock(const VAddr dest_addr, const void* src_buffer, size_t size); void ZeroBlock(const VAddr dest_addr, const size_t size); void CopyBlock(VAddr dest_addr, VAddr src_addr, size_t size); From 29a6fbacd5cfb4ca91466ddb099cb0cc3c3c4632 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Mon, 2 Oct 2017 09:43:30 +0100 Subject: [PATCH 184/195] macOS: Build x86_64h slice This commit produces a fat-binary with two slices. The x86_64 slice is for all x64 systems, and the x86_64h slice targets x64 systems starting with Haswell. The latter allows the compiler to use newer instructions that are not available on older microarchitectures. --- .travis-build.sh | 4 ++-- .travis-upload.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis-build.sh b/.travis-build.sh index bb4e6fc47e..fc5a5f8b2a 100755 --- a/.travis-build.sh +++ b/.travis-build.sh @@ -52,8 +52,8 @@ elif [ "$TRAVIS_OS_NAME" = "osx" ]; then export Qt5_DIR=$(brew --prefix)/opt/qt5 mkdir build && cd build - cmake .. -DUSE_SYSTEM_CURL=ON -GXcode - xcodebuild -configuration Release + cmake .. -DUSE_SYSTEM_CURL=ON -DCMAKE_OSX_ARCHITECTURES="x86_64;x86_64h" -DCMAKE_BUILD_TYPE=Release + make -j4 ctest -VV -C Release fi diff --git a/.travis-upload.sh b/.travis-upload.sh index 8c1fa21c5b..edf195f7d5 100755 --- a/.travis-upload.sh +++ b/.travis-upload.sh @@ -16,8 +16,8 @@ elif [ "$TRAVIS_OS_NAME" = "osx" ]; then COMPRESSION_FLAGS="-czvf" mkdir "$REV_NAME" - cp build/src/citra/Release/citra "$REV_NAME" - cp -r build/src/citra_qt/Release/citra-qt.app "$REV_NAME" + cp build/src/citra/citra "$REV_NAME" + cp -r build/src/citra_qt/citra-qt.app "$REV_NAME" # move qt libs into app bundle for deployment $(brew --prefix)/opt/qt5/bin/macdeployqt "${REV_NAME}/citra-qt.app" From b18589ecf780ca479e077529b789ec481e58f715 Mon Sep 17 00:00:00 2001 From: Subv Date: Sun, 1 Oct 2017 13:57:50 -0500 Subject: [PATCH 185/195] Kernel/SharedMemory: Don't take over and unmap the source memory block when creating a shared memory, just reference it. Also reference the right offset into the backing block for the requested address. --- src/core/hle/kernel/shared_memory.cpp | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/core/hle/kernel/shared_memory.cpp b/src/core/hle/kernel/shared_memory.cpp index 02d5a7a360..d45daca352 100644 --- a/src/core/hle/kernel/shared_memory.cpp +++ b/src/core/hle/kernel/shared_memory.cpp @@ -55,22 +55,19 @@ SharedPtr SharedMemory::Create(SharedPtr owner_process, u Kernel::g_current_process->vm_manager.RefreshMemoryBlockMappings(linheap_memory.get()); } } else { - // TODO(Subv): What happens if an application tries to create multiple memory blocks - // pointing to the same address? auto& vm_manager = shared_memory->owner_process->vm_manager; // The memory is already available and mapped in the owner process. - auto vma = vm_manager.FindVMA(address)->second; - // Copy it over to our own storage - shared_memory->backing_block = std::make_shared>( - vma.backing_block->data() + vma.offset, vma.backing_block->data() + vma.offset + size); - shared_memory->backing_block_offset = 0; - // Unmap the existing pages - vm_manager.UnmapRange(address, size); - // Map our own block into the address space - vm_manager.MapMemoryBlock(address, shared_memory->backing_block, 0, size, - MemoryState::Shared); - // Reprotect the block with the new permissions - vm_manager.ReprotectRange(address, size, ConvertPermissions(permissions)); + auto vma = vm_manager.FindVMA(address); + ASSERT_MSG(vma != vm_manager.vma_map.end(), "Invalid memory address"); + ASSERT_MSG(vma->second.backing_block, "Backing block doesn't exist for address"); + + // The returned VMA might be a bigger one encompassing the desired address. + auto vma_offset = address - vma->first; + ASSERT_MSG(vma_offset + size <= vma->second.size, + "Shared memory exceeds bounds of mapped block"); + + shared_memory->backing_block = vma->second.backing_block; + shared_memory->backing_block_offset = vma->second.offset + vma_offset; } shared_memory->base_address = address; @@ -184,4 +181,4 @@ u8* SharedMemory::GetPointer(u32 offset) { return backing_block->data() + backing_block_offset + offset; } -} // namespace +} // namespace Kernel From b3b34a1e76664c412fd7b37b3529cadd3983acfb Mon Sep 17 00:00:00 2001 From: Huw Pascoe Date: Tue, 3 Oct 2017 12:21:37 +0100 Subject: [PATCH 186/195] Extracted the attribute setup and draw commands into their own functions --- src/video_core/command_processor.cpp | 439 ++++++++++++++------------- 1 file changed, 222 insertions(+), 217 deletions(-) diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp index 3ab4af3747..caf9f7a06a 100644 --- a/src/video_core/command_processor.cpp +++ b/src/video_core/command_processor.cpp @@ -119,6 +119,224 @@ static void WriteUniformFloatReg(ShaderRegs& config, Shader::ShaderSetup& setup, } } +static void LoadDefaultVertexAttributes(u32 register_value) { + auto& regs = g_state.regs; + + // TODO: Does actual hardware indeed keep an intermediate buffer or does + // it directly write the values? + default_attr_write_buffer[default_attr_counter++] = register_value; + + // Default attributes are written in a packed format such that four float24 values are encoded + // in three 32-bit numbers. + // We write to internal memory once a full such vector is written. + if (default_attr_counter >= 3) { + default_attr_counter = 0; + + auto& setup = regs.pipeline.vs_default_attributes_setup; + + if (setup.index >= 16) { + LOG_ERROR(HW_GPU, "Invalid VS default attribute index %d", (int)setup.index); + return; + } + + Math::Vec4 attribute; + + // NOTE: The destination component order indeed is "backwards" + attribute.w = float24::FromRaw(default_attr_write_buffer[0] >> 8); + attribute.z = float24::FromRaw(((default_attr_write_buffer[0] & 0xFF) << 16) | + ((default_attr_write_buffer[1] >> 16) & 0xFFFF)); + attribute.y = float24::FromRaw(((default_attr_write_buffer[1] & 0xFFFF) << 8) | + ((default_attr_write_buffer[2] >> 24) & 0xFF)); + attribute.x = float24::FromRaw(default_attr_write_buffer[2] & 0xFFFFFF); + + LOG_TRACE(HW_GPU, "Set default VS attribute %x to (%f %f %f %f)", (int)setup.index, + attribute.x.ToFloat32(), attribute.y.ToFloat32(), attribute.z.ToFloat32(), + attribute.w.ToFloat32()); + + // TODO: Verify that this actually modifies the register! + if (setup.index < 15) { + g_state.input_default_attributes.attr[setup.index] = attribute; + setup.index++; + } else { + // Put each attribute into an immediate input buffer. When all specified immediate + // attributes are present, the Vertex Shader is invoked and everything is sent to + // the primitive assembler. + + auto& immediate_input = g_state.immediate.input_vertex; + auto& immediate_attribute_id = g_state.immediate.current_attribute; + + immediate_input.attr[immediate_attribute_id] = attribute; + + if (immediate_attribute_id < regs.pipeline.max_input_attrib_index) { + immediate_attribute_id += 1; + } else { + MICROPROFILE_SCOPE(GPU_Drawing); + immediate_attribute_id = 0; + + auto* shader_engine = Shader::GetEngine(); + shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset); + + // Send to vertex shader + if (g_debug_context) + g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation, + static_cast(&immediate_input)); + Shader::UnitState shader_unit; + Shader::AttributeBuffer output{}; + + shader_unit.LoadInput(regs.vs, immediate_input); + shader_engine->Run(g_state.vs, shader_unit); + shader_unit.WriteOutput(regs.vs, output); + + // Send to geometry pipeline + if (g_state.immediate.reset_geometry_pipeline) { + g_state.geometry_pipeline.Reconfigure(); + g_state.immediate.reset_geometry_pipeline = false; + } + ASSERT(!g_state.geometry_pipeline.NeedIndexInput()); + g_state.geometry_pipeline.Setup(shader_engine); + g_state.geometry_pipeline.SubmitVertex(output); + + // TODO: If drawing after every immediate mode triangle kills performance, + // change it to flush triangles whenever a drawing config register changes + // See: https://github.com/citra-emu/citra/pull/2866#issuecomment-327011550 + VideoCore::g_renderer->Rasterizer()->DrawTriangles(); + if (g_debug_context) { + g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); + } + } + } + } +} + +static void Draw(u32 command_id) { + MICROPROFILE_SCOPE(GPU_Drawing); + auto& regs = g_state.regs; + +#if PICA_LOG_TEV + DebugUtils::DumpTevStageConfig(regs.GetTevStages()); +#endif + if (g_debug_context) + g_debug_context->OnEvent(DebugContext::Event::IncomingPrimitiveBatch, nullptr); + + // Processes information about internal vertex attributes to figure out how a vertex is + // loaded. + // Later, these can be compiled and cached. + const u32 base_address = regs.pipeline.vertex_attributes.GetPhysicalBaseAddress(); + VertexLoader loader(regs.pipeline); + + // Load vertices + bool is_indexed = (command_id == PICA_REG_INDEX(pipeline.trigger_draw_indexed)); + + const auto& index_info = regs.pipeline.index_array; + const u8* index_address_8 = Memory::GetPhysicalPointer(base_address + index_info.offset); + const u16* index_address_16 = reinterpret_cast(index_address_8); + bool index_u16 = index_info.format != 0; + + PrimitiveAssembler& primitive_assembler = g_state.primitive_assembler; + + if (g_debug_context && g_debug_context->recorder) { + for (int i = 0; i < 3; ++i) { + const auto texture = regs.texturing.GetTextures()[i]; + if (!texture.enabled) + continue; + + u8* texture_data = Memory::GetPhysicalPointer(texture.config.GetPhysicalAddress()); + g_debug_context->recorder->MemoryAccessed( + texture_data, Pica::TexturingRegs::NibblesPerPixel(texture.format) * + texture.config.width / 2 * texture.config.height, + texture.config.GetPhysicalAddress()); + } + } + + DebugUtils::MemoryAccessTracker memory_accesses; + + // Simple circular-replacement vertex cache + // The size has been tuned for optimal balance between hit-rate and the cost of lookup + const size_t VERTEX_CACHE_SIZE = 32; + std::array vertex_cache_ids; + std::array vertex_cache; + Shader::AttributeBuffer vs_output; + + unsigned int vertex_cache_pos = 0; + vertex_cache_ids.fill(-1); + + auto* shader_engine = Shader::GetEngine(); + Shader::UnitState shader_unit; + + shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset); + + g_state.geometry_pipeline.Reconfigure(); + g_state.geometry_pipeline.Setup(shader_engine); + if (g_state.geometry_pipeline.NeedIndexInput()) + ASSERT(is_indexed); + + for (unsigned int index = 0; index < regs.pipeline.num_vertices; ++index) { + // Indexed rendering doesn't use the start offset + unsigned int vertex = is_indexed + ? (index_u16 ? index_address_16[index] : index_address_8[index]) + : (index + regs.pipeline.vertex_offset); + + // -1 is a common special value used for primitive restart. Since it's unknown if + // the PICA supports it, and it would mess up the caching, guard against it here. + ASSERT(vertex != -1); + + bool vertex_cache_hit = false; + + if (is_indexed) { + if (g_state.geometry_pipeline.NeedIndexInput()) { + g_state.geometry_pipeline.SubmitIndex(vertex); + continue; + } + + if (g_debug_context && Pica::g_debug_context->recorder) { + int size = index_u16 ? 2 : 1; + memory_accesses.AddAccess(base_address + index_info.offset + size * index, size); + } + + for (unsigned int i = 0; i < VERTEX_CACHE_SIZE; ++i) { + if (vertex == vertex_cache_ids[i]) { + vs_output = vertex_cache[i]; + vertex_cache_hit = true; + break; + } + } + } + + if (!vertex_cache_hit) { + // Initialize data for the current vertex + Shader::AttributeBuffer input; + loader.LoadVertex(base_address, index, vertex, input, memory_accesses); + + // Send to vertex shader + if (g_debug_context) + g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation, + (void*)&input); + shader_unit.LoadInput(regs.vs, input); + shader_engine->Run(g_state.vs, shader_unit); + shader_unit.WriteOutput(regs.vs, vs_output); + + if (is_indexed) { + vertex_cache[vertex_cache_pos] = vs_output; + vertex_cache_ids[vertex_cache_pos] = vertex; + vertex_cache_pos = (vertex_cache_pos + 1) % VERTEX_CACHE_SIZE; + } + } + + // Send to geometry pipeline + g_state.geometry_pipeline.SubmitVertex(vs_output); + } + + for (auto& range : memory_accesses.ranges) { + g_debug_context->recorder->MemoryAccessed(Memory::GetPhysicalPointer(range.first), + range.second, range.first); + } + + VideoCore::g_renderer->Rasterizer()->DrawTriangles(); + if (g_debug_context) { + g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); + } +} + static void WritePicaReg(u32 id, u32 value, u32 mask) { auto& regs = g_state.regs; @@ -168,95 +386,9 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { // Load default vertex input attributes case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[0], 0x233): case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[1], 0x234): - case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[2], 0x235): { - // TODO: Does actual hardware indeed keep an intermediate buffer or does - // it directly write the values? - default_attr_write_buffer[default_attr_counter++] = value; - - // Default attributes are written in a packed format such that four float24 values are - // encoded in - // three 32-bit numbers. We write to internal memory once a full such vector is - // written. - if (default_attr_counter >= 3) { - default_attr_counter = 0; - - auto& setup = regs.pipeline.vs_default_attributes_setup; - - if (setup.index >= 16) { - LOG_ERROR(HW_GPU, "Invalid VS default attribute index %d", (int)setup.index); - break; - } - - Math::Vec4 attribute; - - // NOTE: The destination component order indeed is "backwards" - attribute.w = float24::FromRaw(default_attr_write_buffer[0] >> 8); - attribute.z = float24::FromRaw(((default_attr_write_buffer[0] & 0xFF) << 16) | - ((default_attr_write_buffer[1] >> 16) & 0xFFFF)); - attribute.y = float24::FromRaw(((default_attr_write_buffer[1] & 0xFFFF) << 8) | - ((default_attr_write_buffer[2] >> 24) & 0xFF)); - attribute.x = float24::FromRaw(default_attr_write_buffer[2] & 0xFFFFFF); - - LOG_TRACE(HW_GPU, "Set default VS attribute %x to (%f %f %f %f)", (int)setup.index, - attribute.x.ToFloat32(), attribute.y.ToFloat32(), attribute.z.ToFloat32(), - attribute.w.ToFloat32()); - - // TODO: Verify that this actually modifies the register! - if (setup.index < 15) { - g_state.input_default_attributes.attr[setup.index] = attribute; - setup.index++; - } else { - // Put each attribute into an immediate input buffer. When all specified immediate - // attributes are present, the Vertex Shader is invoked and everything is sent to - // the primitive assembler. - - auto& immediate_input = g_state.immediate.input_vertex; - auto& immediate_attribute_id = g_state.immediate.current_attribute; - - immediate_input.attr[immediate_attribute_id] = attribute; - - if (immediate_attribute_id < regs.pipeline.max_input_attrib_index) { - immediate_attribute_id += 1; - } else { - MICROPROFILE_SCOPE(GPU_Drawing); - immediate_attribute_id = 0; - - auto* shader_engine = Shader::GetEngine(); - shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset); - - // Send to vertex shader - if (g_debug_context) - g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation, - static_cast(&immediate_input)); - Shader::UnitState shader_unit; - Shader::AttributeBuffer output{}; - - shader_unit.LoadInput(regs.vs, immediate_input); - shader_engine->Run(g_state.vs, shader_unit); - shader_unit.WriteOutput(regs.vs, output); - - // Send to geometry pipeline - if (g_state.immediate.reset_geometry_pipeline) { - g_state.geometry_pipeline.Reconfigure(); - g_state.immediate.reset_geometry_pipeline = false; - } - ASSERT(!g_state.geometry_pipeline.NeedIndexInput()); - g_state.geometry_pipeline.Setup(shader_engine); - g_state.geometry_pipeline.SubmitVertex(output); - - // TODO: If drawing after every immediate mode triangle kills performance, - // change it to flush triangles whenever a drawing config register changes - // See: https://github.com/citra-emu/citra/pull/2866#issuecomment-327011550 - VideoCore::g_renderer->Rasterizer()->DrawTriangles(); - if (g_debug_context) { - g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, - nullptr); - } - } - } - } + case PICA_REG_INDEX_WORKAROUND(pipeline.vs_default_attributes_setup.set_value[2], 0x235): + LoadDefaultVertexAttributes(value); break; - } case PICA_REG_INDEX(pipeline.gpu_mode): // This register likely just enables vertex processing and doesn't need any special handling @@ -275,136 +407,9 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { // It seems like these trigger vertex rendering case PICA_REG_INDEX(pipeline.trigger_draw): - case PICA_REG_INDEX(pipeline.trigger_draw_indexed): { - MICROPROFILE_SCOPE(GPU_Drawing); - -#if PICA_LOG_TEV - DebugUtils::DumpTevStageConfig(regs.GetTevStages()); -#endif - if (g_debug_context) - g_debug_context->OnEvent(DebugContext::Event::IncomingPrimitiveBatch, nullptr); - - // Processes information about internal vertex attributes to figure out how a vertex is - // loaded. - // Later, these can be compiled and cached. - const u32 base_address = regs.pipeline.vertex_attributes.GetPhysicalBaseAddress(); - VertexLoader loader(regs.pipeline); - - // Load vertices - bool is_indexed = (id == PICA_REG_INDEX(pipeline.trigger_draw_indexed)); - - const auto& index_info = regs.pipeline.index_array; - const u8* index_address_8 = Memory::GetPhysicalPointer(base_address + index_info.offset); - const u16* index_address_16 = reinterpret_cast(index_address_8); - bool index_u16 = index_info.format != 0; - - PrimitiveAssembler& primitive_assembler = g_state.primitive_assembler; - - if (g_debug_context && g_debug_context->recorder) { - for (int i = 0; i < 3; ++i) { - const auto texture = regs.texturing.GetTextures()[i]; - if (!texture.enabled) - continue; - - u8* texture_data = Memory::GetPhysicalPointer(texture.config.GetPhysicalAddress()); - g_debug_context->recorder->MemoryAccessed( - texture_data, Pica::TexturingRegs::NibblesPerPixel(texture.format) * - texture.config.width / 2 * texture.config.height, - texture.config.GetPhysicalAddress()); - } - } - - DebugUtils::MemoryAccessTracker memory_accesses; - - // Simple circular-replacement vertex cache - // The size has been tuned for optimal balance between hit-rate and the cost of lookup - const size_t VERTEX_CACHE_SIZE = 32; - std::array vertex_cache_ids; - std::array vertex_cache; - Shader::AttributeBuffer vs_output; - - unsigned int vertex_cache_pos = 0; - vertex_cache_ids.fill(-1); - - auto* shader_engine = Shader::GetEngine(); - Shader::UnitState shader_unit; - - shader_engine->SetupBatch(g_state.vs, regs.vs.main_offset); - - g_state.geometry_pipeline.Reconfigure(); - g_state.geometry_pipeline.Setup(shader_engine); - if (g_state.geometry_pipeline.NeedIndexInput()) - ASSERT(is_indexed); - - for (unsigned int index = 0; index < regs.pipeline.num_vertices; ++index) { - // Indexed rendering doesn't use the start offset - unsigned int vertex = - is_indexed ? (index_u16 ? index_address_16[index] : index_address_8[index]) - : (index + regs.pipeline.vertex_offset); - - // -1 is a common special value used for primitive restart. Since it's unknown if - // the PICA supports it, and it would mess up the caching, guard against it here. - ASSERT(vertex != -1); - - bool vertex_cache_hit = false; - - if (is_indexed) { - if (g_state.geometry_pipeline.NeedIndexInput()) { - g_state.geometry_pipeline.SubmitIndex(vertex); - continue; - } - - if (g_debug_context && Pica::g_debug_context->recorder) { - int size = index_u16 ? 2 : 1; - memory_accesses.AddAccess(base_address + index_info.offset + size * index, - size); - } - - for (unsigned int i = 0; i < VERTEX_CACHE_SIZE; ++i) { - if (vertex == vertex_cache_ids[i]) { - vs_output = vertex_cache[i]; - vertex_cache_hit = true; - break; - } - } - } - - if (!vertex_cache_hit) { - // Initialize data for the current vertex - Shader::AttributeBuffer input; - loader.LoadVertex(base_address, index, vertex, input, memory_accesses); - - // Send to vertex shader - if (g_debug_context) - g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation, - (void*)&input); - shader_unit.LoadInput(regs.vs, input); - shader_engine->Run(g_state.vs, shader_unit); - shader_unit.WriteOutput(regs.vs, vs_output); - - if (is_indexed) { - vertex_cache[vertex_cache_pos] = vs_output; - vertex_cache_ids[vertex_cache_pos] = vertex; - vertex_cache_pos = (vertex_cache_pos + 1) % VERTEX_CACHE_SIZE; - } - } - - // Send to geometry pipeline - g_state.geometry_pipeline.SubmitVertex(vs_output); - } - - for (auto& range : memory_accesses.ranges) { - g_debug_context->recorder->MemoryAccessed(Memory::GetPhysicalPointer(range.first), - range.second, range.first); - } - - VideoCore::g_renderer->Rasterizer()->DrawTriangles(); - if (g_debug_context) { - g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); - } - + case PICA_REG_INDEX(pipeline.trigger_draw_indexed): + Draw(id); break; - } case PICA_REG_INDEX(gs.bool_uniforms): WriteUniformBoolReg(g_state.gs, g_state.regs.gs.bool_uniforms.Value()); From 7772fc07314d568939b0e9c12e4ead47e35d3c86 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 4 Oct 2017 11:33:32 -0500 Subject: [PATCH 187/195] Memory: Remove all GetPointer usages from the GDB stub. --- src/core/gdbstub/gdbstub.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/core/gdbstub/gdbstub.cpp b/src/core/gdbstub/gdbstub.cpp index be2b2e25f3..d6be16ef66 100644 --- a/src/core/gdbstub/gdbstub.cpp +++ b/src/core/gdbstub/gdbstub.cpp @@ -644,7 +644,7 @@ static void ReadMemory() { auto start_offset = command_buffer + 1; auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); - PAddr addr = HexToInt(start_offset, static_cast(addr_pos - start_offset)); + VAddr addr = HexToInt(start_offset, static_cast(addr_pos - start_offset)); start_offset = addr_pos + 1; u32 len = @@ -656,12 +656,14 @@ static void ReadMemory() { SendReply("E01"); } - const u8* data = Memory::GetPointer(addr); - if (!data) { + if (!Memory::IsValidVirtualAddress(addr)) { return SendReply("E00"); } - MemToGdbHex(reply, data, len); + std::vector data(len); + Memory::ReadBlock(addr, data.data(), len); + + MemToGdbHex(reply, data.data(), len); reply[len * 2] = '\0'; SendReply(reinterpret_cast(reply)); } @@ -670,18 +672,20 @@ static void ReadMemory() { static void WriteMemory() { auto start_offset = command_buffer + 1; auto addr_pos = std::find(start_offset, command_buffer + command_length, ','); - PAddr addr = HexToInt(start_offset, static_cast(addr_pos - start_offset)); + VAddr addr = HexToInt(start_offset, static_cast(addr_pos - start_offset)); start_offset = addr_pos + 1; auto len_pos = std::find(start_offset, command_buffer + command_length, ':'); u32 len = HexToInt(start_offset, static_cast(len_pos - start_offset)); - u8* dst = Memory::GetPointer(addr); - if (!dst) { + if (!Memory::IsValidVirtualAddress(addr)) { return SendReply("E00"); } - GdbHexToMem(dst, len_pos + 1, len); + std::vector data(len); + + GdbHexToMem(data.data(), len_pos + 1, len); + Memory::WriteBlock(addr, data.data(), len); SendReply("OK"); } From b863d6c86043226c8c88749c4e0eecaf9865c569 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 4 Oct 2017 11:40:40 -0500 Subject: [PATCH 188/195] SVC: Replace GetPointer usage with Read32 in WaitSynchronizationN. --- src/core/hle/function_wrappers.h | 8 ++++---- src/core/hle/svc.cpp | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/core/hle/function_wrappers.h b/src/core/hle/function_wrappers.h index 5e6002f4ee..17892d81cd 100644 --- a/src/core/hle/function_wrappers.h +++ b/src/core/hle/function_wrappers.h @@ -58,12 +58,12 @@ void Wrap() { FuncReturn(retval); } -template +template void Wrap() { s32 param_1 = 0; - s32 retval = func(¶m_1, (Kernel::Handle*)Memory::GetPointer(PARAM(1)), (s32)PARAM(2), - (PARAM(3) != 0), (((s64)PARAM(4) << 32) | PARAM(0))) - .raw; + s32 retval = + func(¶m_1, PARAM(1), (s32)PARAM(2), (PARAM(3) != 0), (((s64)PARAM(4) << 32) | PARAM(0))) + .raw; Core::CPU().SetReg(1, (u32)param_1); FuncReturn(retval); diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index 6be5db13ff..9edce7ab7f 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -303,12 +303,11 @@ static ResultCode WaitSynchronization1(Kernel::Handle handle, s64 nano_seconds) } /// Wait for the given handles to synchronize, timeout after the specified nanoseconds -static ResultCode WaitSynchronizationN(s32* out, Kernel::Handle* handles, s32 handle_count, +static ResultCode WaitSynchronizationN(s32* out, VAddr handles_address, s32 handle_count, bool wait_all, s64 nano_seconds) { Kernel::Thread* thread = Kernel::GetCurrentThread(); - // Check if 'handles' is invalid - if (handles == nullptr) + if (!Memory::IsValidVirtualAddress(handles_address)) return Kernel::ERR_INVALID_POINTER; // NOTE: on real hardware, there is no nullptr check for 'out' (tested with firmware 4.4). If @@ -323,7 +322,8 @@ static ResultCode WaitSynchronizationN(s32* out, Kernel::Handle* handles, s32 ha std::vector objects(handle_count); for (int i = 0; i < handle_count; ++i) { - auto object = Kernel::g_handle_table.Get(handles[i]); + Kernel::Handle handle = Memory::Read32(handles_address + i * sizeof(Kernel::Handle)); + auto object = Kernel::g_handle_table.Get(handle); if (object == nullptr) return ERR_INVALID_HANDLE; objects[i] = object; From 0cfb231e002629172337c048e8cabc8c653e34e3 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 4 Oct 2017 11:49:29 -0500 Subject: [PATCH 189/195] SVC: Replace GetPointer usage with Read32 in ReplyAndReceive. --- src/core/hle/function_wrappers.h | 5 ++--- src/core/hle/svc.cpp | 8 ++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/core/hle/function_wrappers.h b/src/core/hle/function_wrappers.h index 17892d81cd..cd500e83da 100644 --- a/src/core/hle/function_wrappers.h +++ b/src/core/hle/function_wrappers.h @@ -69,11 +69,10 @@ void Wrap() { FuncReturn(retval); } -template +template void Wrap() { s32 param_1 = 0; - u32 retval = - func(¶m_1, (Kernel::Handle*)Memory::GetPointer(PARAM(1)), (s32)PARAM(2), PARAM(3)).raw; + u32 retval = func(¶m_1, PARAM(1), (s32)PARAM(2), PARAM(3)).raw; Core::CPU().SetReg(1, (u32)param_1); FuncReturn(retval); diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index 9edce7ab7f..61360bedeb 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -452,10 +452,9 @@ static ResultCode WaitSynchronizationN(s32* out, VAddr handles_address, s32 hand } /// In a single operation, sends a IPC reply and waits for a new request. -static ResultCode ReplyAndReceive(s32* index, Kernel::Handle* handles, s32 handle_count, +static ResultCode ReplyAndReceive(s32* index, VAddr handles_address, s32 handle_count, Kernel::Handle reply_target) { - // 'handles' has to be a valid pointer even if 'handle_count' is 0. - if (handles == nullptr) + if (!Memory::IsValidVirtualAddress(handles_address)) return Kernel::ERR_INVALID_POINTER; // Check if 'handle_count' is invalid @@ -466,7 +465,8 @@ static ResultCode ReplyAndReceive(s32* index, Kernel::Handle* handles, s32 handl std::vector objects(handle_count); for (int i = 0; i < handle_count; ++i) { - auto object = Kernel::g_handle_table.Get(handles[i]); + Kernel::Handle handle = Memory::Read32(handles_address + i * sizeof(Kernel::Handle)); + auto object = Kernel::g_handle_table.Get(handle); if (object == nullptr) return ERR_INVALID_HANDLE; objects[i] = object; From 3c0113632dc4fb4e55b5dad9278a5b766dcaec14 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 4 Oct 2017 11:52:39 -0500 Subject: [PATCH 190/195] SVC: Replace GetPointer usage with ReadBlock in OutputDebugString. --- src/core/hle/function_wrappers.h | 4 ++-- src/core/hle/svc.cpp | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/core/hle/function_wrappers.h b/src/core/hle/function_wrappers.h index cd500e83da..cb0b430ee9 100644 --- a/src/core/hle/function_wrappers.h +++ b/src/core/hle/function_wrappers.h @@ -267,9 +267,9 @@ void Wrap() { func(((s64)PARAM(1) << 32) | PARAM(0)); } -template +template void Wrap() { - func((char*)Memory::GetPointer(PARAM(0)), PARAM(1)); + func(PARAM(0), PARAM(1)); } template diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index 61360bedeb..37eeeb860b 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -619,8 +619,10 @@ static void Break(u8 break_reason) { } /// Used to output a message on a debug hardware unit - does nothing on a retail unit -static void OutputDebugString(const char* string, int len) { - LOG_DEBUG(Debug_Emulated, "%.*s", len, string); +static void OutputDebugString(VAddr address, int len) { + std::vector string(len); + Memory::ReadBlock(address, string.data(), len); + LOG_DEBUG(Debug_Emulated, "%.*s", len, string.data()); } /// Get resource limit From 7b09b30ef11d1d4001a50bbb91abdfb86b954ce2 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 4 Oct 2017 12:05:13 -0500 Subject: [PATCH 191/195] SVC: Replace GetPointer usage with ReadCString in ConnectToPort. --- src/core/hle/function_wrappers.h | 15 --------------- src/core/hle/svc.cpp | 14 +++++++++----- 2 files changed, 9 insertions(+), 20 deletions(-) diff --git a/src/core/hle/function_wrappers.h b/src/core/hle/function_wrappers.h index cb0b430ee9..a982b2b545 100644 --- a/src/core/hle/function_wrappers.h +++ b/src/core/hle/function_wrappers.h @@ -151,21 +151,6 @@ void Wrap() { FuncReturn(func(PARAM(0)).raw); } -template -void Wrap() { - FuncReturn(func((s64*)Memory::GetPointer(PARAM(0)), PARAM(1), - (u32*)Memory::GetPointer(PARAM(2)), (s32)PARAM(3)) - .raw); -} - -template -void Wrap() { - u32 param_1 = 0; - u32 retval = func(¶m_1, (char*)Memory::GetPointer(PARAM(1))).raw; - Core::CPU().SetReg(1, param_1); - FuncReturn(retval); -} - template void Wrap() { u32 param_1 = 0; diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index 37eeeb860b..2ae177ab56 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -201,17 +201,21 @@ static ResultCode UnmapMemoryBlock(Kernel::Handle handle, u32 addr) { } /// Connect to an OS service given the port name, returns the handle to the port to out -static ResultCode ConnectToPort(Kernel::Handle* out_handle, const char* port_name) { - if (port_name == nullptr) +static ResultCode ConnectToPort(Kernel::Handle* out_handle, VAddr port_name_address) { + if (!Memory::IsValidVirtualAddress(port_name_address)) return Kernel::ERR_NOT_FOUND; - if (std::strlen(port_name) > 11) + + static constexpr std::size_t PortNameMaxLength = 11; + // Read 1 char beyond the max allowed port name to detect names that are too long. + std::string port_name = Memory::ReadCString(port_name_address, PortNameMaxLength + 1); + if (port_name.size() > PortNameMaxLength) return Kernel::ERR_PORT_NAME_TOO_LONG; - LOG_TRACE(Kernel_SVC, "called port_name=%s", port_name); + LOG_TRACE(Kernel_SVC, "called port_name=%s", port_name.c_str()); auto it = Service::g_kernel_named_ports.find(port_name); if (it == Service::g_kernel_named_ports.end()) { - LOG_WARNING(Kernel_SVC, "tried to connect to unknown port: %s", port_name); + LOG_WARNING(Kernel_SVC, "tried to connect to unknown port: %s", port_name.c_str()); return Kernel::ERR_NOT_FOUND; } From 46fc7595b4f5f161ecd5ae21259c661c15ca46f3 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 4 Oct 2017 12:11:55 -0500 Subject: [PATCH 192/195] SVC: Remove GetPointer usage in CreatePort. --- src/core/hle/function_wrappers.h | 6 ++---- src/core/hle/svc.cpp | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/core/hle/function_wrappers.h b/src/core/hle/function_wrappers.h index a982b2b545..f93439f21f 100644 --- a/src/core/hle/function_wrappers.h +++ b/src/core/hle/function_wrappers.h @@ -206,13 +206,11 @@ void Wrap() { FuncReturn(func(PARAM(0), PARAM(1)).raw); } -template +template void Wrap() { Kernel::Handle param_1 = 0; Kernel::Handle param_2 = 0; - u32 retval = func(¶m_1, ¶m_2, - reinterpret_cast(Memory::GetPointer(PARAM(2))), PARAM(3)) - .raw; + u32 retval = func(¶m_1, ¶m_2, PARAM(2), PARAM(3)).raw; Core::CPU().SetReg(1, param_1); Core::CPU().SetReg(2, param_2); FuncReturn(retval); diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index 2ae177ab56..b72ca3581c 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -1104,9 +1104,9 @@ static ResultCode CreateMemoryBlock(Kernel::Handle* out_handle, u32 addr, u32 si } static ResultCode CreatePort(Kernel::Handle* server_port, Kernel::Handle* client_port, - const char* name, u32 max_sessions) { + VAddr name_address, u32 max_sessions) { // TODO(Subv): Implement named ports. - ASSERT_MSG(name == nullptr, "Named ports are currently unimplemented"); + ASSERT_MSG(name_address == 0, "Named ports are currently unimplemented"); using Kernel::ServerPort; using Kernel::ClientPort; From 97f262c1f5c39e51d6fe2e32429610599299db60 Mon Sep 17 00:00:00 2001 From: Subv Date: Wed, 4 Oct 2017 12:23:08 -0500 Subject: [PATCH 193/195] SVC: Removed GetPointer usage in the GetResourceLimit functions. --- src/core/hle/svc.cpp | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/src/core/hle/svc.cpp b/src/core/hle/svc.cpp index b72ca3581c..e8ca419d5e 100644 --- a/src/core/hle/svc.cpp +++ b/src/core/hle/svc.cpp @@ -644,9 +644,9 @@ static ResultCode GetResourceLimit(Kernel::Handle* resource_limit, Kernel::Handl } /// Get resource limit current values -static ResultCode GetResourceLimitCurrentValues(s64* values, Kernel::Handle resource_limit_handle, - u32* names, u32 name_count) { - LOG_TRACE(Kernel_SVC, "called resource_limit=%08X, names=%p, name_count=%d", +static ResultCode GetResourceLimitCurrentValues(VAddr values, Kernel::Handle resource_limit_handle, + VAddr names, u32 name_count) { + LOG_TRACE(Kernel_SVC, "called resource_limit=%08X, names=%08X, name_count=%d", resource_limit_handle, names, name_count); SharedPtr resource_limit = @@ -654,16 +654,19 @@ static ResultCode GetResourceLimitCurrentValues(s64* values, Kernel::Handle reso if (resource_limit == nullptr) return ERR_INVALID_HANDLE; - for (unsigned int i = 0; i < name_count; ++i) - values[i] = resource_limit->GetCurrentResourceValue(names[i]); + for (unsigned int i = 0; i < name_count; ++i) { + u32 name = Memory::Read32(names + i * sizeof(u32)); + s64 value = resource_limit->GetCurrentResourceValue(name); + Memory::Write64(values + i * sizeof(u64), value); + } return RESULT_SUCCESS; } /// Get resource limit max values -static ResultCode GetResourceLimitLimitValues(s64* values, Kernel::Handle resource_limit_handle, - u32* names, u32 name_count) { - LOG_TRACE(Kernel_SVC, "called resource_limit=%08X, names=%p, name_count=%d", +static ResultCode GetResourceLimitLimitValues(VAddr values, Kernel::Handle resource_limit_handle, + VAddr names, u32 name_count) { + LOG_TRACE(Kernel_SVC, "called resource_limit=%08X, names=%08X, name_count=%d", resource_limit_handle, names, name_count); SharedPtr resource_limit = @@ -671,8 +674,11 @@ static ResultCode GetResourceLimitLimitValues(s64* values, Kernel::Handle resour if (resource_limit == nullptr) return ERR_INVALID_HANDLE; - for (unsigned int i = 0; i < name_count; ++i) - values[i] = resource_limit->GetMaxResourceValue(names[i]); + for (unsigned int i = 0; i < name_count; ++i) { + u32 name = Memory::Read32(names + i * sizeof(u32)); + s64 value = resource_limit->GetMaxResourceValue(names); + Memory::Write64(values + i * sizeof(u64), value); + } return RESULT_SUCCESS; } From 15a2388a33b1306dcaf16b62432c7a13b40ca2a3 Mon Sep 17 00:00:00 2001 From: MerryMage Date: Fri, 6 Oct 2017 20:58:48 +0100 Subject: [PATCH 194/195] travis: Split build scripts for different platforms This commit also separates clang-format from the linux build, closing #2702. --- .travis-build.sh | 59 -------- .travis-deps.sh | 12 -- .travis-upload.sh | 139 ------------------ .travis.yml | 34 +++-- .travis/clang-format/script.sh | 37 +++++ .travis/common/post-upload.sh | 22 +++ .travis/common/pre-upload.sh | 6 + .travis/linux/build.sh | 3 + .travis/linux/deps.sh | 3 + .../linux/docker.sh | 5 +- .travis/linux/upload.sh | 14 ++ .travis/macos/build.sh | 12 ++ .travis/macos/deps.sh | 4 + .travis/macos/upload.sh | 110 ++++++++++++++ 14 files changed, 233 insertions(+), 227 deletions(-) delete mode 100755 .travis-build.sh delete mode 100755 .travis-deps.sh delete mode 100755 .travis-upload.sh create mode 100755 .travis/clang-format/script.sh create mode 100755 .travis/common/post-upload.sh create mode 100755 .travis/common/pre-upload.sh create mode 100755 .travis/linux/build.sh create mode 100755 .travis/linux/deps.sh rename .travis-build-docker.sh => .travis/linux/docker.sh (94%) mode change 100644 => 100755 create mode 100755 .travis/linux/upload.sh create mode 100755 .travis/macos/build.sh create mode 100755 .travis/macos/deps.sh create mode 100755 .travis/macos/upload.sh diff --git a/.travis-build.sh b/.travis-build.sh deleted file mode 100755 index fc5a5f8b2a..0000000000 --- a/.travis-build.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -set -e -set -x - -if grep -nr '\s$' src *.yml *.txt *.md Doxyfile .gitignore .gitmodules .travis* dist/*.desktop \ - dist/*.svg dist/*.xml; then - echo Trailing whitespace found, aborting - exit 1 -fi - -# Only run clang-format on Linux because we don't have 4.0 on OS X images -if [ "$TRAVIS_OS_NAME" = "linux" ]; then - # Default clang-format points to default 3.5 version one - CLANG_FORMAT=clang-format-3.9 - $CLANG_FORMAT --version - - if [ "$TRAVIS_EVENT_TYPE" = "pull_request" ]; then - # Get list of every file modified in this pull request - files_to_lint="$(git diff --name-only --diff-filter=ACMRTUXB $TRAVIS_COMMIT_RANGE | grep '^src/[^.]*[.]\(cpp\|h\)$' || true)" - else - # Check everything for branch pushes - files_to_lint="$(find src/ -name '*.cpp' -or -name '*.h')" - fi - - # Turn off tracing for this because it's too verbose - set +x - - for f in $files_to_lint; do - d=$(diff -u "$f" <($CLANG_FORMAT "$f") || true) - if ! [ -z "$d" ]; then - echo "!!! $f not compliant to coding style, here is the fix:" - echo "$d" - fail=1 - fi - done - - set -x - - if [ "$fail" = 1 ]; then - exit 1 - fi -fi - -#if OS is linux or is not set -if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then - docker run -v $(pwd):/citra ubuntu:16.04 /bin/bash /citra/.travis-build-docker.sh -elif [ "$TRAVIS_OS_NAME" = "osx" ]; then - set -o pipefail - - export MACOSX_DEPLOYMENT_TARGET=10.9 - export Qt5_DIR=$(brew --prefix)/opt/qt5 - - mkdir build && cd build - cmake .. -DUSE_SYSTEM_CURL=ON -DCMAKE_OSX_ARCHITECTURES="x86_64;x86_64h" -DCMAKE_BUILD_TYPE=Release - make -j4 - - ctest -VV -C Release -fi diff --git a/.travis-deps.sh b/.travis-deps.sh deleted file mode 100755 index 0cee68041b..0000000000 --- a/.travis-deps.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh - -set -e -set -x - -#if OS is linux or is not set -if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then - docker pull ubuntu:16.04 -elif [ "$TRAVIS_OS_NAME" = "osx" ]; then - brew update - brew install qt5 sdl2 dylibbundler p7zip -fi diff --git a/.travis-upload.sh b/.travis-upload.sh deleted file mode 100755 index edf195f7d5..0000000000 --- a/.travis-upload.sh +++ /dev/null @@ -1,139 +0,0 @@ -GITDATE="`git show -s --date=short --format='%ad' | sed 's/-//g'`" -GITREV="`git show -s --format='%h'`" -mkdir -p artifacts - -if [ "$TRAVIS_OS_NAME" = "linux" -o -z "$TRAVIS_OS_NAME" ]; then - REV_NAME="citra-linux-${GITDATE}-${GITREV}" - ARCHIVE_NAME="${REV_NAME}.tar.xz" - COMPRESSION_FLAGS="-cJvf" - mkdir "$REV_NAME" - - cp build/src/citra/citra "$REV_NAME" - cp build/src/citra_qt/citra-qt "$REV_NAME" -elif [ "$TRAVIS_OS_NAME" = "osx" ]; then - REV_NAME="citra-osx-${GITDATE}-${GITREV}" - ARCHIVE_NAME="${REV_NAME}.tar.gz" - COMPRESSION_FLAGS="-czvf" - mkdir "$REV_NAME" - - cp build/src/citra/citra "$REV_NAME" - cp -r build/src/citra_qt/citra-qt.app "$REV_NAME" - - # move qt libs into app bundle for deployment - $(brew --prefix)/opt/qt5/bin/macdeployqt "${REV_NAME}/citra-qt.app" - - # move SDL2 libs into folder for deployment - dylibbundler -b -x "${REV_NAME}/citra" -cd -d "${REV_NAME}/libs" -p "@executable_path/libs/" - - # Make the changes to make the citra-qt app standalone (i.e. not dependent on the current brew installation). - # To do this, the absolute references to each and every QT framework must be re-written to point to the local frameworks - # (in the Contents/Frameworks folder). - # The "install_name_tool" is used to do so. - - # Coreutils is a hack to coerce Homebrew to point to the absolute Cellar path (symlink dereferenced). i.e: - # ls -l /usr/local/opt/qt5:: /usr/local/opt/qt5 -> ../Cellar/qt5/5.6.1-1 - # grealpath ../Cellar/qt5/5.6.1-1:: /usr/local/Cellar/qt5/5.6.1-1 - brew install coreutils - - REV_NAME_ALT=$REV_NAME/ - # grealpath is located in coreutils, there is no "realpath" for OS X :( - QT_BREWS_PATH=$(grealpath "$(brew --prefix qt5)") - BREW_PATH=$(brew --prefix) - QT_VERSION_NUM=5 - - $BREW_PATH/opt/qt5/bin/macdeployqt "${REV_NAME_ALT}citra-qt.app" \ - -executable="${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt" - - # These are the files that macdeployqt packed into Contents/Frameworks/ - we don't want those, so we replace them. - declare -a macos_libs=("QtCore" "QtWidgets" "QtGui" "QtOpenGL" "QtPrintSupport") - - for macos_lib in "${macos_libs[@]}" - do - SC_FRAMEWORK_PART=$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib - # Replace macdeployqt versions of the Frameworks with our own (from /usr/local/opt/qt5/lib/) - cp "$BREW_PATH/opt/qt5/lib/$SC_FRAMEWORK_PART" "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" - - # Replace references within the embedded Framework files with "internal" versions. - for macos_lib2 in "${macos_libs[@]}" - do - # Since brew references both the non-symlinked and symlink paths of QT5, it needs to be duplicated. - # /usr/local/Cellar/qt5/5.6.1-1/lib and /usr/local/opt/qt5/lib both resolve to the same files. - # So the two lines below are effectively duplicates when resolved as a path, but as strings, they aren't. - RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2 - install_name_tool -change \ - $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \ - @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ - "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" - install_name_tool -change \ - "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \ - @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ - "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" - done - done - - # Handles `This application failed to start because it could not find or load the Qt platform plugin "cocoa"` - # Which manifests itself as: - # "Exception Type: EXC_CRASH (SIGABRT) | Exception Codes: 0x0000000000000000, 0x0000000000000000 | Exception Note: EXC_CORPSE_NOTIFY" - # There may be more dylibs needed to be fixed... - declare -a macos_plugins=("Plugins/platforms/libqcocoa.dylib") - - for macos_lib in "${macos_plugins[@]}" - do - install_name_tool -id @executable_path/../$macos_lib "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" - for macos_lib2 in "${macos_libs[@]}" - do - RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2 - install_name_tool -change \ - $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \ - @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ - "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" - install_name_tool -change \ - "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \ - @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ - "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" - done - done - - for macos_lib in "${macos_libs[@]}" - do - # Debugging info for Travis-CI - otool -L "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib" - done - - # Make the citra-qt.app application launch a debugging terminal. - # Store away the actual binary - mv ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt-bin - - cat > ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt < ../Cellar/qt5/5.6.1-1 +# grealpath ../Cellar/qt5/5.6.1-1:: /usr/local/Cellar/qt5/5.6.1-1 +brew install coreutils || brew upgrade coreutils || true + +REV_NAME_ALT=$REV_NAME/ +# grealpath is located in coreutils, there is no "realpath" for OS X :( +QT_BREWS_PATH=$(grealpath "$(brew --prefix qt5)") +BREW_PATH=$(brew --prefix) +QT_VERSION_NUM=5 + +$BREW_PATH/opt/qt5/bin/macdeployqt "${REV_NAME_ALT}citra-qt.app" \ + -executable="${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt" + +# These are the files that macdeployqt packed into Contents/Frameworks/ - we don't want those, so we replace them. +declare -a macos_libs=("QtCore" "QtWidgets" "QtGui" "QtOpenGL" "QtPrintSupport") + +for macos_lib in "${macos_libs[@]}" +do + SC_FRAMEWORK_PART=$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib + # Replace macdeployqt versions of the Frameworks with our own (from /usr/local/opt/qt5/lib/) + cp "$BREW_PATH/opt/qt5/lib/$SC_FRAMEWORK_PART" "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" + + # Replace references within the embedded Framework files with "internal" versions. + for macos_lib2 in "${macos_libs[@]}" + do + # Since brew references both the non-symlinked and symlink paths of QT5, it needs to be duplicated. + # /usr/local/Cellar/qt5/5.6.1-1/lib and /usr/local/opt/qt5/lib both resolve to the same files. + # So the two lines below are effectively duplicates when resolved as a path, but as strings, they aren't. + RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2 + install_name_tool -change \ + $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \ + @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ + "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" + install_name_tool -change \ + "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \ + @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ + "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$SC_FRAMEWORK_PART" + done +done + +# Handles `This application failed to start because it could not find or load the Qt platform plugin "cocoa"` +# Which manifests itself as: +# "Exception Type: EXC_CRASH (SIGABRT) | Exception Codes: 0x0000000000000000, 0x0000000000000000 | Exception Note: EXC_CORPSE_NOTIFY" +# There may be more dylibs needed to be fixed... +declare -a macos_plugins=("Plugins/platforms/libqcocoa.dylib") + +for macos_lib in "${macos_plugins[@]}" +do + install_name_tool -id @executable_path/../$macos_lib "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" + for macos_lib2 in "${macos_libs[@]}" + do + RM_FRAMEWORK_PART=$macos_lib2.framework/Versions/$QT_VERSION_NUM/$macos_lib2 + install_name_tool -change \ + $QT_BREWS_PATH/lib/$RM_FRAMEWORK_PART \ + @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ + "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" + install_name_tool -change \ + "$BREW_PATH/opt/qt5/lib/$RM_FRAMEWORK_PART" \ + @executable_path/../Frameworks/$RM_FRAMEWORK_PART \ + "${REV_NAME_ALT}citra-qt.app/Contents/$macos_lib" + done +done + +for macos_lib in "${macos_libs[@]}" +do + # Debugging info for Travis-CI + otool -L "${REV_NAME_ALT}citra-qt.app/Contents/Frameworks/$macos_lib.framework/Versions/$QT_VERSION_NUM/$macos_lib" +done + +# Make the citra-qt.app application launch a debugging terminal. +# Store away the actual binary +mv ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt-bin + +cat > ${REV_NAME_ALT}citra-qt.app/Contents/MacOS/citra-qt < Date: Mon, 9 Oct 2017 09:10:48 +0800 Subject: [PATCH 195/195] Change command header in nwm::UDS Initialize function --- src/core/hle/service/nwm/nwm_uds.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/hle/service/nwm/nwm_uds.cpp b/src/core/hle/service/nwm/nwm_uds.cpp index 0aa63cc1e1..87a6b0ecaa 100644 --- a/src/core/hle/service/nwm/nwm_uds.cpp +++ b/src/core/hle/service/nwm/nwm_uds.cpp @@ -975,7 +975,7 @@ void OnClientConnected(u16 network_node_id) { } const Interface::FunctionInfo FunctionTable[] = { - {0x00010442, nullptr, "Initialize (deprecated)"}, + {0x000102C2, nullptr, "Initialize (deprecated)"}, {0x00020000, nullptr, "Scrap"}, {0x00030000, Shutdown, "Shutdown"}, {0x00040402, nullptr, "CreateNetwork (deprecated)"},

AXgvtR^Fe*7DRCtM>t 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